[Spring] @RequsetMapping produces, consume 의미와 역할
@Mapping 어노테이션의 역할
Spring Boot 기반으로 웹 어플리케이션을 개발하게 되면 외부에서 들어오는 url을 처리할수 있도록 여러가지 Mapping 어노테이션을 사용하게 됩니다. 스프링 4.3 버전 이전에는 @RequestMapping만 있었지만 역할을 명시적으로 분리하기 위해 @GetMapping, @PostMapping, @DeleteMapping, @PostMapping, @PatchMapping 어노테이션들이 탄생했습니다.
컨트롤러에서 이런 Mapping 어노테이션들을 사용할때 파라미터로 value 값만 지정하여 url 경로에 대한 정의만 하는 경우도 있지만 컨트롤러를 통해 들어오거나 반환해줘야 하는 데이터의 형식을 지정하기위해 produces, consumes 라는 파라미터를 사용하기도 합니다.
produces, consumes 의 정의
- produces : 클라이언트에게 반환하는 HTTP Header의 형식을 지정하는 파라미터
- consumes : 클라이언트에서 들어오는 HTTP Header의 형식을 지정하는 파라미터
consumes을 Json타입으로 지정하였는데 클라이언트의 요청 Header 형식이 Json형식이 아닐경우 org.springframework.web.HttpMediaTypeNotSupportedException 예외가 발생하게 됩니다.
produces의 경우 지정한 타입이 있다면 해당 타입으로 클라이언트에게 반환하고 produces를 사용하지 않았다면 컨트롤러 메서드의 리턴값에 따라 Content-type이 정해지게 됩니다.
produces, consumes를 json 타입으로 지정한다면 아래와 같이 처리합니다.
@GetMapping(value="/home", produces=MediaType.APPLICATION_JSON_VALUE)
public void home(){
...
}
@GetMapping(value="/home", consumes=MediaType.APPLICATION_JSON_VALUE)
public void home(){
...
}
MediaType.APPLICATION_JSON_VALUE 의 값이 "application/json" 입니다 (동일한 결과)
참조
'WEB > Spring' 카테고리의 다른 글
[Spring] 웹소켓(Websocket) 개념과 예제 (0) | 2023.08.11 |
---|---|
[Spring] 객체지향 설계의 5원칙 (SOLID) #다형성 #의존관계 #인터페이스 분리 (0) | 2023.01.11 |
[Spring] 스프링 빈 웹 스코프, request 타입과 프록시 모드 - 2/2 (2) | 2022.06.19 |
[Spring] 스프링 빈 스코프(Scope) 싱글톤, 프로토 타입 - 1/2 (0) | 2022.06.19 |
[Spring] 스프링 빈 생명주기 초기화, 소멸 콜백 관리하기 @PostConstruct, @PreDestroy (0) | 2022.05.26 |
댓글