지난 포스팅에서 현재 가장 많이 사용되고 있는 어노테이션 기반 컨트롤러에 대해서 다루어 보았다. 어노테이션 기반 컨트롤러는 다양한 파라미터를 제공하고 있다. 이번 포스팅에서는 요청의 헤더정보를 가져오는 방법에 대해서 다루어 보겠다.
Request가 DispatcherServlet으로 들어오면 요청과 매핑되는 Handler(Controller) 실행 권한을 HandlerAdpater에게 위임한다. HandlerAdapter는 요청과 매핑되는 메소드를 호출하여 비즈니스 로직을 실행하는데, 여기서 HanderAdapter가 파라미터에 적합한 데이터를 넘겨준다.
그러므로 파라미터로 헤더정보를 요구하면 HandlerAdapter는 Request의 헤더정보를 넘겨준다. 그럼 파라미터로 어떤 헤더 정보를 넘겨 받을 수 있는지 알아보자.
Handler(Controller)
@Slf4j
@RestController
public class RequestHeaderController {
@RequestMapping("/method")
public String headerMethod(HttpMethod httpMethod){ // 메소드 정보 받기
log.info("httpMethod={}",httpMethod);
return "OK";
}
@RequestMapping("/locale")
public String headerLocale(Locale locale){ // Locale 정보 받기
log.info("locale={}",locale);
return "OK";
}
@RequestMapping("/headermap")
public String headerMap( @RequestHeader MultiValueMap<String,String> headerMap){ // 모든 HTTP 헤더데이터를 MultiValueMap 형식으로 받기
log.info("headerMap={}",headerMap);
return "OK";
}
@RequestMapping("/host")
public String headerHost(@RequestHeader("host") String host){ // 호스트 정보 받기
log.info("header host={}",host);
return "OK";
}
@RequestMapping("/cookie")
public String headerCookie(@CookieValue(value = "myCookie", required = false) Cookie cookie){ // 쿠키정보 받기
log.info("myCookie={}",cookie);
return "OK";
}
}
- HttpMethod
파라미터로 HttpMethod 타입의 데이터를 요구하면 HandlerAdpater는 현재 들어온 Request의 HTTP Method 정보를 넘겨준다. (GET, POST, PUT ... )
- Locale
Locale은 Request의 언어설정을 나타내는 데이터로 , HandlerAdpater는 Locale 타입을 갖는 파라미터에 Locale 데이터를 넘긴다. ( ko-KR .. )
- @RequestHeader MultiValueMap<string,string>
@RequestHeader 로 표시된 MultiValueMap<String,String> 타입이면 모든 HTTP의 헤더정보를 파라미터로 받을 수 있다. MultiValueMap 타입은 동일한 key에 여러가지 value를 저장할 수 있는 Map으로, key1=value1&key1=value2 와 같이 &연산자로 동일한 key에 여러 value를 받는 HTTP key-value 구조에 적합하다.
- @RequestHeader("host")
@RequestHeader 어노테이션에 key를 설정하면 원하는 key의 value값을 파라미터로 넘겨 받을 수 있다. @RequestHeader("host") String host를 예로 들면, @RequestHeader에 'host'를 설정하면 host 정보를 파라미터로 받을 수 있다.
- @CookieValue
원하는 쿠키를 정보를 얻고 싶다면 @CookieValue 를 사용한다. required는 필수값 여부를 설정하는 속성으로, 필수 쿠키인데 조회되지 않는다면 Exception을 일으킨다. required가 true인데 조회되지 않은면 Exception이 발생하는 것이다.
이렇듯, 어노테이션 기반의 Controller는 파라미터로 단순 데이터뿐만이 아니라 Header 데이터까지 전부 받아 처리가 가능하다.
참고자료
'SPRING > Spring MVC' 카테고리의 다른 글
[SpringMVC] HTTP 요청 파라미터 - @ModelAttribute (0) | 2023.08.11 |
---|---|
[SpringMVC] HTTP 요청 파라미터 - @RequestParam (0) | 2023.08.11 |
[SpringMVC] @RequestMapping의 다양한 속성 (0) | 2023.08.10 |
[SpringMVC] @RequestMapping, @Controller (0) | 2023.08.10 |
[SpringMVC] HandlerAdapter (0) | 2023.08.10 |