달리는 두딘

[Spring] Consumes와 Produces의 차이 본문

지식노트

[Spring] Consumes와 Produces의 차이

디두딘 2023. 2. 9. 21:51

 

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


이걸 위해 사용하는 것 중 하나가 MediaTypes이다.
들어오는 데이터와 나가는 데이터를 정하여 처리를 할 수 있다.

 


 

Consumes

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

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://mungto.tistory.com/438