@ResponseBody 와 @RequestBody 가 요청본문과 응답본문에 접근하는 건 HttpMessageConverter 를 통해 이루어 집니다.
@ResponseBody
@ResponseBody 는 메서드 실행결과를 응답 본문(response body)으로 취급하겠다고 스프링 MVC에 밝힙니다.
@RequestBody
@ResponseBody는 클래스 수준에서도 지원되며,이 경우 모든 컨트롤러 메서드에 상속됩니다.
@RequestBody 는 HTTP 요청 본문(request body)에 액세스합니다.
ResponseEntity
ResponseEntity는 @ResponseBody와 비슷하지만 상태와 헤더가 있습니다.
@GetMapping("/something")
public ResponseEntity<String> handle() {
    String body = ... ;
    String etag = ... ;
    return ResponseEntity.ok().eTag(etag).build(body);
}
HttpMessageConverter
InputStream과 OutputStream을 통해 HTTP 요청과 응답본문을 읽고 쓸 수 있습니다.
서버측은 RequestMethodHandlerAdapter 에 등록됩니다.
모든 변환기(converter)의 경우 기본 media type이 사용되지만 supportedMediaTypes bean 등록 정보를 설정하여 이를 대체 할 수 있습니다.
아래는 HttpMessageConverter 구현체
- StringHttpMessageConverter - media type: text/*
- Content-Type: text/plain
 
- FormHttpMessageConverter - media type: application/x-www-form-urlencoded
- form data: MultiValueMap<String, String>
 
- ByteArrayHttpMessageConverter - media type: */*
- Content-Type: application/octet-stream
 
- MarshallingHttpMessageConverter - text/xml, application/xml
 
- MappingJackson2HttpMessageConverter - application/json
 
- MappingJackson2XmlHttpMessageConverter -  - application/xml
 
 
-  
- SourceHttpMessageConverter
- BufferedImageHttpMessageConverter