본문 바로가기

Springあるある

@ResponseBody(Feat. produces)

스프링에서 @ResponseBody를 사용하면, 반환된 데이터를 HTTP 응답 본문에 직접 작성하며, 스프링이 자동으로 적절한 Content-Type 헤더를 설정합니다.

Content-Type 설정 방식:

  1. HttpMessageConverter:
    • @ResponseBody는 반환 데이터를 HTTP 응답 본문으로 변환하기 위해 HttpMessageConverter를 사용합니다.
    • HttpMessageConverter는 반환 객체의 타입과 요청 헤더의 Accept를 기반으로 적절한 Content-Type을 결정합니다.
  2. 일반적인 Content-Type 예시:
    • String 반환 시: text/plain;charset=UTF-8
    • Map, Object, 또는 JSON 변환 가능 객체 반환 시: application/json;charset=UTF-8 (기본적으로 Jackson 라이브러리를 사용)
    • XML 변환 가능 객체 반환 시 (XML 메시지 컨버터가 등록된 경우): application/xml;charset=UTF-8
  3. 커스터마이징:
    • 개발자가 @RequestMapping이나 @GetMapping에 produces 속성을 설정하면 특정 Content-Type을 강제할 수 있습니다.
      java
      코드 복사
      @GetMapping(value = "/example", produces = "application/json") public MyResponse example() { return new MyResponse(); }
  4. 우선 순위:
    • 클라이언트의 Accept 헤더가 우선순위를 가집니다.
    • 스프링은 클라이언트의 요청을 만족시키는 Content-Type을 설정하려고 시도합니다. 하지만 명시된 produces가 있다면 그것이 우선합니다.

정리:

@ResponseBody를 사용하면 스프링이 응답 데이터 타입에 따라 자동으로 Content-Type을 설정하며, 일반적으로 JSON 데이터의 경우 application/json으로 설정됩니다.