yeon's blog

[Spring] HTTP 요청 - 기본, 헤더 정보 조회 본문

Spring/Spring 개념

[Spring] HTTP 요청 - 기본, 헤더 정보 조회

yeonii 2024. 1. 14. 14:31

HTTP 요청 - 기본, 헤더 정보 조회

애노테이션 기반의 스프링 컨트롤러는 다양한 파라미터를 지원한다.

HTTP 요청 헤더 정보를 조회하기 위한 코드를 작성한 후, @Slf4j 로깅 라이브러리를 이용해 각 요청에 대한 로그를 남겨 확인해보았다.

*로그 관련 글 첨부 https://hyeyeon-ii.tistory.com/66

 

RequestHeaderController 전체코드

package hello.springmvc.basic.request;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Locale;

@Slf4j
@RestController
public class RequestHeaderController {

    @RequestMapping("/headers")
    public String header(HttpServletRequest request,
                         HttpServletResponse response,
                         HttpMethod httpMethod,
                         Locale locale,
                         @RequestHeader MultiValueMap<String, String> headerMap,
                         @RequestHeader("host") String host,
                         @CookieValue(value = "myCookie", required = false) String cookie) {

        log.info("request={}", request);
        log.info("response={}", response);
        log.info("httpMethod={}", httpMethod);
        log.info("locale={}", locale);
        log.info("headerMap={}", headerMap);
        log.info("header host={}", host);
        log.info("myCookie={}", cookie);

        return "ok";
    }
}

 

  • HttpServletReqeust: 서블릿 기반의 요청 객체
  • HttpServletResponse: 서블릿 기반의 응답 객체
  • HttpMethod: HTTP 메서드 정보 조회
  • Locale: 언어 정보 조회(우선 순위가 높은 locale 출력)
  • @RequestHeader MultiValueMap<String, String> headerMap
    • 모든 HTTP 헤더를 MutliValue 형식으로 조회
  • @RequestHeader("host") String host:
    • 특정 HTTP 헤더 조회
    • 속성
      • 필수값 여부: required
      • 기본값 속성: defaultValue
  • @CookieValue(value = "myCookie", required = false)
    • 특정 쿠키 조회
    • 속성
      • 필수값 여부: required
      • 기본값 속성: defaultValue

 

출력

2024-01-14T13:31:13.519+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : request=org.apache.catalina.connector.RequestFacade@3707a89b
2024-01-14T13:31:13.519+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : response=org.apache.catalina.connector.ResponseFacade@54d3b869
2024-01-14T13:31:13.519+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : httpMethod=GET
2024-01-14T13:31:13.519+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : locale=ko_KR
2024-01-14T13:31:13.519+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : headerMap={host=[localhost:8080], user-agent=[Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0], accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8], accept-language=[ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3], accept-encoding=[gzip, deflate, br], connection=[keep-alive], referer=[http://localhost:8080/], cookie=[username-localhost-8888="2|1:0|10:1704706949|23:username-localhost-8888|44:ODgzOTZhODJiYWVmNDgyNTg2Mzk2Y2NlZjcyNDVmZGI=|c566d6872b83eb7cf3a42b344bdf4ce3e94cb88f5fa53cb41a5f15562fe7b2d3"; _xsrf=2|d0eeb3ee|5f118ebeda60d9366104a77f9cef350f|1704639082; JSESSIONID=FB844F2EDF9E62DCCB858E2558D61C50], upgrade-insecure-requests=[1], sec-fetch-dest=[document], sec-fetch-mode=[navigate], sec-fetch-site=[same-origin], sec-fetch-user=[?1]}
2024-01-14T13:31:13.519+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : header host=localhost:8080
2024-01-14T13:31:13.520+09:00  INFO 4160 --- [nio-8080-exec-3] h.s.b.request.RequestHeaderController    : myCookie=null