SPRING/Spring MVC

[SpringMVC] HTTP 요청 파라미터 - @RequestHeader

IT록흐 2023. 8. 11. 16:03
반응형
 

[SpringMVC] @RequestMapping, @Controller

[SpringMVC] HandlerAdapter [SpringMVC] MVC 패턴 구현하기(4) - Adapter [SpringMVC] MVC 패턴 구현하기(1) - View [SpringMVC] 응답(Response)의 종류 ( Text, Html, Json ) [SpringMVC] 요청(Request)의 종류 ( GET, POST, JSON ) [SpringMVC] 웹

lordofkangs.tistory.com

 

 

지난 포스팅에서 현재 가장 많이 사용되고 있는 어노테이션 기반 컨트롤러에 대해서 다루어 보았다. 어노테이션 기반 컨트롤러는 다양한 파라미터를 제공하고 있다. 이번 포스팅에서는 요청의 헤더정보를 가져오는 방법에 대해서 다루어 보겠다.

 

 

 

 

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 데이터까지 전부 받아 처리가 가능하다. 

 

 


 

참고자료

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

 

 

반응형