[Spring] Request Mapping (2)

이연우·2025년 7월 23일

TIL

목록 보기
28/100

🎯 특정 파라미터 매핑(params)

  • 속성 설정을 통하여 특정 헤더, 특정 파라미터와 Mapping 할 수 있음

1. Parameter 추가 매핑

  • 요청 URL에 특정 파라미터 조건이 있을 때만 매핑
package com.example.springbasicannotation.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ParameterController {

    // parms 속성값 추가
    @GetMapping(value = "/users", params = "gender=man")
    public String params() {
        // logic
        String result = "params API가 호출 되었습니다.";
        return result;
    }

}

→ 실제 URL GET http://localhost:8080/users?gender=man 파라미터가 있어야 호출됨

⚠️ 파라미터가 없다면 400 Bad Request 클라이언트 측 에러 발생

✅ params 속성 사용법

설정 예시의미
params = "gender"gender 파라미터 존재 시만 호출
params = "!gender"gender 파라미터가 없을 때만 호출
params = "gender=man"gender=man일 때만 호출
params = "gender!=man"gender 값이 man이 아닐 때 호출
params = {"a=1", "b=2"}다중 조건 설정 가능

2. 특정 Header 매핑(headers)

  • 요청 HTTP Header 조건에 따라 매핑
@RestController
public class ParameterController {
	
	// headers 속성값 추가
  @PostMapping(value = "/users", headers = "Content-Type=application/json")
  public String headers() {
      // logic
      String result = "headers API가 호출 되었습니다.";
      return result;
  }
	
}

headersparams와 같은 방식으로 부정, 다중 설정 가능
→ Postman 등의 툴로 테스트 필요
→ 속성 작성 규칙은 위 params 속성 값의 규칙과 같음

3. MediaType 매핑, consume(수용)

  • 요청의 Content-Type이 특정 타입일 때만 매핑
@PostMapping(value = "/users", consumes = "application/json")
// 또는 MediaType.APPLICATION_JSON_VALUE
설정 예시의미
application/jsonJSON 요청 본문만 수용
!application/jsonJSON 제외
application/*application으로 시작하는 모든 타입 허용
*/*전체 미디어 타입 허용

📌 미지정이거나 다르면 415 Unsupported Media Type 오류 발생

4. MediaType 매핑 produces(제공)

  • 요청의 Accept 헤더에 따라 응답 Content-Type 지정
@GetMapping(value = "/users", produces = "text/plain")
설정 예시의미
text/plaintext 응답만 반환
application/jsonJSON 응답만 반환

📌 producesconsumes와 같은 형식의 조건 지원

📢 위에 나온 모든 MediaType은 Spring이 제공하는 Enum을 사용하면 됨


🧰 Spring이 지원하는 Parameter

  • Spring MVC는 다양한 HTTP 요소를 쉽게 파라미터로 받을 수 있도록 지원

💡 예시: @RequestHeader, @CookieValue, HttpServletRequest

@GetMapping("/request/headers")
public String headers(
    HttpServletRequest request,
    HttpServletResponse response,
    @RequestHeader MultiValueMap<String, String> headerMap,
    @RequestHeader("host") String host,
    @CookieValue(value = "cookie", required = false) String cookie,
    HttpMethod httpMethod,
    Locale locale
) {
    log.info("host={}", host);
    log.info("cookie={}", cookie);
    return "success";
}

🧾 MultiValueMap이란?

  • 하나의 키에 여러 개의 값을 저장할 수 있는 자료 구조
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("key1", "value1");
map.add("key1", "value2");
List<String> values = map.get("key1"); // [value1, value2]

HTTP 요청 파라미터헤더 정보처럼 같은 키에 여러 값이 들어오는 경우 유용


📚 참고 문서

0개의 댓글