프레임워크/Spring

[Spring] consumes와 produces의 차이

멍토 2021. 4. 21.

Mapping을 할때 우리는 받고싶은 데이터를 강제를 함으로써 오류상황을 줄일 수 있다.

이걸 위해 사용하는 것 중 하나가 Media Types이다.

들어오는 데이터와 나가는 데이터를 정하여 처리를 할 수 있다.

consumes는 들어오는 데이터 타입을 정의할때 이용한다.

예를 들어서 내가 json타입을 받고 싶다면 아래와 같이 처리가 가능하다.

@PostMapping(path = "/pets", consumes = MediaType.APPLICATION_JSON_VALUE) 
public void addPet(@RequestBody Pet pet) {
    // ...
}

이렇게 처리를 하게되면 해당 uri를 호출하는 쪽에서는 헤더에 보내는 데이터가 json이라는 것을 명시해야 한다.

Content-Type:application/json

아직 나는 사용해보지는 않았지만 부정형 또한 지원한다.

공식문서에 보면 아래와 같이 적혀있다.

The `consumes` attribute also supports negation expressions — for example, `!text/plain` means any content type other than `text/plain`.

 

 

produces는 반환하는 데이터 타입을 정의한다.

@GetMapping(path = "/pets/{petId}", produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody
public Pet getPet(@PathVariable String petId) {
    // ...
}

이럴 경우 반환 타입이 json으로 강제된다.

내가 보내야 하는 타입이 정해져 있다면 해당 부분을 정의하면 된다.

요청하는 입장에서 특정 타입의 데이터를 원한다면 아래와 같은 내용을 헤더에 추가한다.

Accept:application/json

요약정리 :

  1. consumes는 클라이언트가 서버에게 보내는 데이터 타입을 명시한다.
  2. produces는 서버가 클라이언트에게 반환하는 데이터 타입을 명시한다.

출처 : https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping-consumes

https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping-produces

https://m.blog.naver.com/writer0713/221422059349

댓글

💲 광고입니다.