스프링 MVC 내부에서는 HTTP 메시지 바디를 읽어서 문자나 객체로 변환해서 전달해주는데, 이때 HTTP 메시저 컨버터(HttpMessageConverter)라는 기능을 사용한다.
특히, HttpEntity, @RequestBody를 사용하면 HTTP 메시지 컨버터가 HTTP 메시지 바디의 내용을 우리가 원하는 문자나 객체등으로 변환해준다.
HTTP 메시지 컨버터는 문자 뿐만 아니라 JSON도 객체로 변환해준다.
참고)
HTTP 요청시에 content-type이 application/json인지 꼭 확인해야 한다. 그래야 JSON을 처리할 수 있는 HTTP 메시지 컨버터가 실행된다.
@RequestBody
요청@ResponseBody
응답좀더 자세히 설명하면 아래와 같다.
@ResponseBody
를 사용viewResolver
대신에 HttpMessageConverter
가 동작viewResolver
는 리소스 경로를 만들어줌. 근데 이건 API 서버니까)StringHttpMessageConverter
MappingJackson2HttpMessageConverter
참고)
응답의 경우 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서HttpMessageConverter
가 선택된다.
스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다.
@RequestBody
, HttpEntity(RequestEntity)
@ResponseBody
, HttpEntity(ResponseEntity)
HTTP 메시지 컨버터는 HTTP 요청, 응답 둘 다 사용된다.
canRead()
, canWrite()
: 메시지 컨버터가 해당 클래스, 미디타입을 지원하는지 체크read()
, write()
: 메시지 컨버터를 통해서 메시지를 읽고 쓰는 기능0 = ByteArrayHttpMessageConverter
1 = StringHttpMessageConverter
2 = MappingJackson2HttpMessageConverter
스프링 부트는 다양한 메시지 컨버터를 제공하는데, 대상 클래스 타입과 미디어 타입 둘을 체크해서 사용 여부를 결정한다. 만약 만족하지 않으면 다음 메시지 컨버터로 우선순위가 넘어간다.
해당 포스팅은 아래의 강의를 공부하여 정리한 내용입니다.
김영한님의 스프링 핵심 원리 고급