XML
이나 JSON
을 이용한 AJAX기능이나 웹 서비스를 개발할 때 사용된다.@RequestBody
와 @ResponseBody
를 통해 HTTP 메시지 컨버터를 자동 사용할 수 있다.@RequestBody
를 사용할 수 없고, 이 경우엔 @RequestParam
이나 @ModelAttribute
를 사용해야 한다.BackgroundPreinitializer
클래스는 이름그대로 미리초기화되는걸 관리하는 클래스인데, 내부적으로 MessageConverter를 생성하여 실행 시키는 것을 알 수 있다.AllEncompassingFormHttpMessageConverter()
HttpMessageConverter를 생성해주는 이 생성자를 따라 들어 가면Json
을 model
로 매핑해주는 MappingJackson2HttpMessageConverter
를 만들어 주는게 보인다.그럼 나머지 메시지컨버터는 어딨을까?
- 위
AllEncompassingFormHttpMessageConverter
를 다시 보면,FormHttpMessageConverter
를 상속하고 있는 것을 알 수 있다.- 그래서
FormHttpMessageConverter
를 확인해보면 HttpMessageConverter를 List로 가지고 있다.- 우선순위는 List에 추가된 순서대로 탐색을 하기에, 추가된 순서를 따른다.
- ByteArrayHttpMessageConverter
- StringHttpMessageConverter
- SourceHttpMessageConvreter
@RequestBody
byte[] param
과 같이 작성하면 모든 요청을 다 byte배열로 받을 수 있다는 말이다.byte[]
로 했을 경우 Content-Type
이 applcation/octet-stream
으로 설정되어 전달된다.HTTP 본문을 그대로 String
으로 가져올 수 있다.Content-Type
은 text/plain
Content-Type
이 application/octet-stream
를 지원한다. 알려지지않은 파일 타입은 이타입을 사용한다.MediaType.APPLICATION_FORM_URLENCODED
, MediaType.MULTIPART_FORM_DATA
,MediaType.MULTIPART_MIXED
이다.MediaType.APPLICATION_JSON
만 지원한다.@EnableWebMvc
안에 있는 WebMvcConfigurationSupport
에 의해 재정의되고,더 많은 메시지컨버터들이 등록되어 관리받게 된다.@EnableWebMvc
은 WebMvcConfigurer인터페이스
를 상속받는 구현체 커스텀Configuration
에 붙이는 애노테이션이다.@EnableWebMvc
MVC 관련된 bean들을 수정할때 쓰인다고 한다.