T_era
특정 파라미터 및 헤더 매핑 본문
특정 파라미터 매핑 (params)
- @RequestMapping 또는 HTTP 메서드 매핑 어노테이션(@GetMapping, @PostMapping 등)의 params 속성을 사용하여 특정 파라미터가 요청에 포함될 때만 매핑할 수 있다.
@RestController
public class ParameterController {
@GetMapping(value = "/users", params = "gender=man")
public String params() {
return "params API가 호출 되었습니다.";
}
}
- 위 예시는 GET 요청의 URL이 /users이고, gender 파라미터의 값이 man일 때만 해당 메서드를 실행한다.
- 실제 URL 호출 예시: GET http://localhost:8080/users?gender=man
params 속성 작성 규칙
- params = "key": 해당 key를 가진 파라미터가 존재해야 한다.
- params = "!key": 해당 key를 가진 파라미터가 존재하지 않아야 한다.
- params = "key=value": 해당 key를 가진 파라미터의 값이 value와 같아야 한다.
- params = "key!=value": 해당 key를 가진 파라미터의 값이 value와 달라야 한다.
- params = {"key1=value1", "key2=value2"}: 여러 개의 파라미터 조건들을 배열 형태로 설정할 수 있다.
특정 헤더 매핑 (headers)
- @RequestMapping 또는 HTTP 메서드 매핑 어노테이션의 headers 속성을 사용하여 특정 HTTP 헤더가 요청에 포함될 때만 매핑할 수 있다.
@RestController
public class ParameterController {
@PostMapping(value = "/users", headers = "Content-Type=application/json")
public String headers() {
return "headers API가 호출 되었습니다.";
}
}
- 위 예시는 POST 요청의 URL이 /users이고, Content-Type 헤더의 값이 application/json일 때만 해당 메서드를 실행한다.
- 테스트 시 Postman과 같은 HTTP 클라이언트를 사용하여 헤더를 직접 설정해야 한다.
- headers 속성의 작성 규칙은 params 속성의 규칙과 동일하다.
MediaType 매핑 (consumes)
- @RequestMapping 또는 HTTP 메서드 매핑 어노테이션의 consumes 속성을 사용하여 요청의 Content-Type 헤더 값을 기반으로 매핑할 수 있다. 즉, 특정 미디어 타입을 수용하는 요청만 처리한다.
- MediaType Enum을 사용하여 표준 미디어 타입 값을 지정하는 것이 일반적이다.
@RestController
public class ParameterController {
@PostMapping(value = "/users", consumes = "application/json") // MediaType.APPLICATION_JSON_VALUE 와 동일
public String consumes() {
return "consumes API가 호출 되었습니다.";
}
}
consumes 속성 작성 규칙
- consumes = "application/json": Content-Type이 application/json인 요청만 허용한다.
- consumes = "!application/json": Content-Type이 application/json이 아닌 요청만 허용한다.
- consumes = "application/*": Content-Type이 application/으로 시작하는 모든 미디어 타입을 허용한다.
- consumes = "*/*": 모든 미디어 타입을 허용한다.
MediaType 매핑 (produces)
- @RequestMapping 또는 HTTP 메서드 매핑 어노테이션의 produces 속성을 사용하여 응답의 Content-Type 헤더 값을 설정한다. 요청의 Accept 헤더 값을 기반으로 응답 형식을 결정할 수 있다.
@RestController
public class ParameterController {
@GetMapping(value = "/users", produces = "text/plain")
public String produces() {
return "text/plain 데이터 응답";
}
}
- 위 예시는 해당 메서드의 응답으로 Content-Type: text/plain 헤더를 설정하여 텍스트 형식의 데이터를 제공한다.
- HTTP 요청 시 Accept 헤더에 원하는 미디어 타입을 명시해야 한다.
Spring이 지원하는 파라미터 및 응답 값
- Spring MVC 컨트롤러 메서드에서는 다양한 타입의 파라미터를 사용할 수 있다. 자세한 내용은 공식 문서를 참고한다.
- @Controller 사용 가능 파라미터 목록: https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html
- @Controller 사용 가능 응답 값 목록: https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/return-types.html
HTTP 헤더 조회 (@RequestHeader) 및 쿠키 조회 (@CookieValue)
- @RequestHeader 어노테이션을 사용하여 요청 헤더에 쉽게 접근할 수 있다. HttpServletRequest 객체를 직접 사용할 수도 있다.
- @CookieValue 어노테이션을 사용하여 쿠키 값을 편리하게 조회할 수 있다.
@Slf4j
@RestController
public class RequestHeaderController {
@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("request={}", request);
log.info("response={}", response);
log.info("headerMap={}", headerMap);
log.info("host={}", host);
log.info("cookie={}", cookie);
log.info("httpMethod={}", httpMethod);
log.info("Locale={}", locale);
return "success";
}
}
- @RequestHeader MultiValueMap<String, String> headerMap: 모든 헤더 정보를 맵 형태로 조회한다.
- @RequestHeader("host") String host: 특정 헤더(host)의 값을 조회한다.
- @CookieValue(value = "cookie", required = false) String cookie: 특정 쿠키(cookie)의 값을 조회한다. required = false는 해당 쿠키가 없어도 에러를 발생시키지 않도록 설정한다.
- HttpMethod httpMethod: 요청 메서드(GET, POST 등)를 조회한다.
- Locale locale: 요청의 Locale 정보를 조회한다.
매핑 우선순위: Spring MVC는 다양한 매핑 조건을 기반으로 요청을 처리할 때 우선순위를 가진다. 더 구체적인 조건이 더 높은 우선순위를 가진다.
'Programing > Spring' 카테고리의 다른 글
| MultiValueMap (0) | 2025.05.06 |
|---|---|
| MediaMapping의 속성별 차이점 (0) | 2025.05.06 |
| @PathVariable 정리 (0) | 2025.05.06 |
| @RequestMapping 어노테이션 정리 (0) | 2025.05.06 |
| Spring 어노테이션 정리 (0) | 2025.05.06 |