josolha
Spring MVC에서 Consumes와 Produces 본문
Consumes와 Produces란?
Spring Framework에서 @RequestMapping 또는 그 파생 어노테이션들(@GetMapping, @PostMapping 등)은
HTTP 요청을 특정 메소드에 매핑하는 데 사용된다.
이 때 consumes와 produces 속성을 사용하여,
컨트롤러가 처리할 수 있는 요청의 Content-Type과 반환할 수 있는 응답의 Content-Type을 각각 지정할 수 있다.
Consumes
- 용도: 컨트롤러가 처리할 수 있는 요청 본문의 미디어 타입을 지정한다.
- 디폴트 값: 지정되지 않을 경우, 모든 Content-Type의 요청을 수락한다.
- 사용 예시:
@PostMapping(path = "/submitData", consumes = MediaType.APPLICATION_JSON_VALUE)
public String submitData(@RequestBody MyData data) {
// JSON 형식의 데이터 처리 로직
return "Data processed";
}
이 코드는 JSON 형식의 데이터만을 처리하는 POST 요청을 매핑한다.
Produces
- 용도: 컨트롤러가 클라이언트에 반환할 응답 본문의 미디어 타입을 지정한다.
- 디폴트 값: 지정되지 않을 경우, 클라이언트의 Accept 헤더에 따라 다양한 미디어 타입의 응답을 생성할 수 있다.
- 사용 예시:
@GetMapping(path = "/getData", produces = MediaType.APPLICATION_XML_VALUE)
public MyResponse getData() {
MyResponse response = new MyResponse();
// XML 형식의 응답 데이터 설정
return response;
}
이 코드는 XML 형식의 데이터를 반환하는 GET 요청을 매핑한다.
그럼 왜 사용하는가?
- 명시성: API가 어떤 종류의 데이터를 기대하고 반환하는지 명확하게 정의한다.
이는 클라이언트 개발자에게 분명한 지침을 제공하고, 올바른 데이터 형식의 전송을 유도한다. - 유효성 검증과 에러 핸들링: Spring은 지정된 미디어 타입 외의 요청을 자동으로 거부하고,
적절한 HTTP 상태 코드로 응답한다. 이는 서버에서 불필요한 요청을 처리하지 않도록 하여 보안과 성능을 향상시킨다.
( 415 Unsupported Media Type 로 응답) - 코드 가독성과 유지 보수: 명확한 API 정의는 코드의 이해와 유지 보수를 용이하게 한다.
결론
consumes와 produces 속성을 사용함으로써,
Spring MVC 애플리케이션에서 RESTful API를 더 명확하고 안정적으로 설계할 수 있다.
이를 통해 API의 효율성을 높이고, 클라이언트와의 효과적인 데이터 교환을 보장할 수 있다.
'Spring' 카테고리의 다른 글
@ReponseBody,@RestController,ResonseEntity (0) | 2023.12.14 |
---|---|
JPA의 N+1 문제와 해결 (0) | 2023.12.08 |
JPA, Hibernate, Spring Data JPA (0) | 2023.12.04 |
Servlet Container , Spring Container (0) | 2023.12.02 |
Eco-reading 트러블 슈팅(실시간 알림 기능) (1) | 2023.11.27 |