본문 바로가기
Develop/Spring

[Spring Web MVC] Request Mapping - consumes, produces

by 준팍(junpak) 2023. 4. 17.

Media Types

  • 일반적으로 사용되는 미디어 유형에 대한 상수 제공
    • APPLICATION_JSON_VALUE
    • APPLICATION_XML_VALUE
  • 문자 집합 지정 가능
  • 부정 표현식 지원
    • ex) !text/plain은 텍스트/일반 이외의 모든 Content-Type 의미

Producible Media Types

// produces 속성을 이용한 방법
@GetMapping(path = "/pets/{petId}", produces = "application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId) {
    // ...
}
  • Accept request header와 컨트롤러 메서드가 생성하는 Content-Type 목록을 기반으로 요청 매핑의 범위를 좁힐 수 있다.
  • 클래스 레벨에서 produces 속성 선언 가능
  • 클래스 수준에서 사용하는 경우, 메서드 레벨 produces 속성은 클래스 수준 선언을 확장하지 않고 재정의한다.

Consumable Media Types

// consumes 속성을 이용한 방법
@PostMapping(path = "/pets", consumes = "application/json")
public void addPet(@RequestBody Pet pet) {
    // ...
}
  • request의 Content-Type에 따라 요청 매핑의 범위를 좁힐 수 있다.
  • 클래스 레벨에서 consume 속성 선언 가능
  • 클래스 수준에서 사용하는 경우, 메서드 레벨 consumes 속성은 클래스 수준 선언을 확장하지 않고 재정의한다.

Spring Web MVC에서 POST의 MediaType은 항상 consumes, GET의 MediaType은 항상 produces인가요?

  • consumes
    • 특정 미디어 타입의 요청 본문이 들어오는 경우에만 해당 핸들러 메소드가 처리하도록 지정합니다.
    • 일반적으로 POST, PUT 또는 PATCH 요청과 같은 변경 작업에 사용되지만,
      필요한 경우 다른 HTTP 메소드에도 적용할 수 있습니다.
  • produces
    • 이 속성은 핸들러 메소드가 생성할 수 있는 응답의 미디어 타입을 지정합니다.
    • GET 요청에 대해 사용되는 경우가 많지만, 필요한 경우 다른 HTTP 메소드에도 적용할 수 있습니다.
  • HTTP Header
    • Accept
      • 클라이언트가 선호하는 응답 형식을 서버에 알려주는 역할
      • 클라이언트가 처리할 수 있는 MIME 타입(Multipurpose Internet Mail Extensions)의 목록을 포함
      • 서버는 이 정보를 사용하여 클라이언트가 이해할 수 있는 형식으로 적절한 응답을 제공 가능
    • Content-Type
      • HTTP 메시지 본문의 실제 미디어 타입을 서버에 알려주는 역할
      • 서버가 본문을 올바르게 해석할 수 있도록 하기 위해 필요