minOS

스프링 MVC 기본 기능 - HTTP 요청 본문

TIL/김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

스프링 MVC 기본 기능 - HTTP 요청

minOE 2024. 7. 28. 13:43
728x90

HTTP 요청 - 기본, 헤더 조회

애노테이션 기반의 스프링 컨트롤러는 다양한 파라미터를 지원한다. 
HTTP 헤더 정보를 조회하는 방법을 알아보자.
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.*;

import java.util.Locale;

@Slf4j
@RestController
public class RequestHeaderController {
    @RequestMapping("/headers")
    public String headers(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";
    }
}​

Postman으로 테스트


log 결과


각 파라미터에 대한 설명

1. HttpServletRequest request:
 - 목적: 클라이언트가 서버로 보낸 HTTP 요청을 나타냅니다.
 - 사용법: 요청 데이터(헤더, 파라미터, 세션 속성 등)에 접근할 수 있습니다.
 - 예제: `request.getParameter("name")`를 사용하여 "name"이라는 쿼리 파라미터 값을 가져올 수 있습니다.

2. HttpServletResponse response:
 - 목적: 서버가 클라이언트에게 보낼 HTTP 응답을 나타냅니다.
 - 사용법: 응답 헤더, 상태 코드, 본문 내용을 설정할 수 있습니다.
  - 예제: `response.setStatus(HttpServletResponse.SC_OK)`를 사용하여 응답 상태를 200 OK로 설정할 수 있습니다.

3. HttpMethod httpMethod:
    - 목적: 요청의 HTTP 메서드(GET, POST, PUT, DELETE 등)를 나타냅니다.
    - 사용법: 처리 중인 요청의 유형을 결정할 수 있습니다.
    - 예제: `if (httpMethod == HttpMethod.POST) { // POST 요청 처리 }`.

4. Locale locale:

    - 목적: 요청의 로케일 정보를 나타내며, 클라이언트의 선호 언어 및 지역을 나타냅니다.
    - 사용법: 클라이언트의 선호도에 따라 응답을 지역화할 수 있습니다.
    - 예제: `locale.getLanguage()`를 사용하여 언어 코드를 가져올 수 있습니다 (예: "en"은 영어).

5. @RequestHeader MultiValueMap<String, String> headerMap:

    - 목적: 모든 요청 헤더를 맵으로 받아옵니다.
    - 사용법: 클라이언트가 보낸 모든 헤더에 접근할 수 있습니다.
    - 예제: `headerMap.get("User-Agent")`를 사용하여 "User-Agent" 헤더 값을 가져올 수 있습니다.

6. @RequestHeader("host") String host:

    - 목적: 특정 "host" 헤더 값을 추출합니다.
    - 사용법: 요청 헤더에서 호스트 정보를 가져올 수 있습니다.
    - 예제: `log.info("Host: {}", host)`를 사용하여 호스트 헤더 값을 로그에 기록할 수 있습니다.

7. @CookieValue(value = "myCookie", required = false) String cookie:

    - 목적: "myCookie"라는 특정 쿠키 값을 받아옵니다.
    - 사용법: 클라이언트가 보낸 특정 쿠키 값에 접근할 수 있습니다. `required = false` 속성은 이 쿠키가 선택적임을 의미하며, 쿠키가 없으면 이 인자는 `null`이 됩니다.
    - 예제: `if (cookie != null) { // 쿠키 값 사용 }`.

728x90