🎯 특정 파라미터 매핑(
params)
- 속성 설정을 통하여 특정 헤더, 특정 파라미터와 Mapping 할 수 있음
1. Parameter 추가 매핑
package com.example.springbasicannotation.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParameterController {
// parms 속성값 추가
@GetMapping(value = "/users", params = "gender=man")
public String params() {
// logic
String result = "params API가 호출 되었습니다.";
return result;
}
}
→ 실제 URL GET http://localhost:8080/users?gender=man 파라미터가 있어야 호출됨
⚠️ 파라미터가 없다면 400 Bad Request 클라이언트 측 에러 발생
✅ params 속성 사용법
| 설정 예시 | 의미 |
|---|---|
params = "gender" | gender 파라미터 존재 시만 호출 |
params = "!gender" | gender 파라미터가 없을 때만 호출 |
params = "gender=man" | gender=man일 때만 호출 |
params = "gender!=man" | gender 값이 man이 아닐 때 호출 |
params = {"a=1", "b=2"} | 다중 조건 설정 가능 |
2. 특정 Header 매핑(headers)
@RestController
public class ParameterController {
// headers 속성값 추가
@PostMapping(value = "/users", headers = "Content-Type=application/json")
public String headers() {
// logic
String result = "headers API가 호출 되었습니다.";
return result;
}
}
→ headers도 params와 같은 방식으로 부정, 다중 설정 가능
→ Postman 등의 툴로 테스트 필요
→ 속성 작성 규칙은 위 params 속성 값의 규칙과 같음
3. MediaType 매핑, consume(수용)
Content-Type이 특정 타입일 때만 매핑@PostMapping(value = "/users", consumes = "application/json")
// 또는 MediaType.APPLICATION_JSON_VALUE
| 설정 예시 | 의미 |
|---|---|
application/json | JSON 요청 본문만 수용 |
!application/json | JSON 제외 |
application/* | application으로 시작하는 모든 타입 허용 |
*/* | 전체 미디어 타입 허용 |
📌 미지정이거나 다르면 415 Unsupported Media Type 오류 발생
4. MediaType 매핑 produces(제공)
Accept 헤더에 따라 응답 Content-Type 지정@GetMapping(value = "/users", produces = "text/plain")
| 설정 예시 | 의미 |
|---|---|
text/plain | text 응답만 반환 |
application/json | JSON 응답만 반환 |
📌 produces도 consumes와 같은 형식의 조건 지원
📢 위에 나온 모든 MediaType은 Spring이 제공하는 Enum을 사용하면 됨
🧰 Spring이 지원하는 Parameter
- Spring MVC는 다양한 HTTP 요소를 쉽게 파라미터로 받을 수 있도록 지원
💡 예시: @RequestHeader, @CookieValue, HttpServletRequest
@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("host={}", host);
log.info("cookie={}", cookie);
return "success";
}
🧾 MultiValueMap이란?
- 하나의 키에 여러 개의 값을 저장할 수 있는 자료 구조
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("key1", "value1");
map.add("key1", "value2");
List<String> values = map.get("key1"); // [value1, value2]
→ HTTP 요청 파라미터나 헤더 정보처럼 같은 키에 여러 값이 들어오는 경우 유용
📚 참고 문서