T_era

특정 파라미터 및 헤더 매핑 본문

Programing/Spring

특정 파라미터 및 헤더 매핑

블스뜸 2025. 5. 6. 16:57

특정 파라미터 매핑 (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이 지원하는 파라미터 및 응답 값

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