Spring/Spring MVC
(SERVLET) HTTP 메세지 컨버터 (2) - Json
주누
2020. 2. 11. 00:33
WebMvcConfigurationSupport.Class > addDefaultHttpMessageConverters
위와 같이 분기에 따라서 해당 컨버터를 추가한다.
해당 컨버터가 있는지 없는지는 어떻게 판단하는가?
ClassUtils로 풀 패키지 경로에 해당하는 클래스가 있는지 없는지로 판단
즉 classPath에 해당하는 라이브러리가 등록되어 있는 경우에만 메시지 컨버터를 등록해준다.
예를 들어서 jackSon2는 SpringBoot가 기본적으로 제공해준다.
json 메시지를 jackSon2가 제공하는 ObjectMapper를 이용해서 Person 객체로 변환한다.
@GetMapping("/jsonMessage")
public Person jsonMessage (@RequestBody Person person) {
return person;
}
여러 가지 컨버터 중 어떠한 컨버터를 사용할지를 판단할 때 요청 헤더 정보를 참조한다.
@Test
public void jsonMessage() throws Exception {
Person person = new Person();
person.setId(2019l);
person.setName("choijunwoo");
String jsonString = objectMapper.writeValueAsString(person);
// TODO: [jsonMessage] junwoochoi 11/02/2020 12:17 오전
// 여러가지 컨버터중 어떠한 컨버터를 사용할지 판단할 때 요청 헤더정보를 참조 (contentType)
this.mockMvc.perform(get( "/jsonMessage")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content(jsonString))
.andDo(print())
.andExpect(status().isOk());
MockHttpServletRequest:
HTTP Method = GET
Request URI = /jsonMessage
Parameters = {}
Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/json", Content-Length:"31"]
Body = {"name":"choijunwoo","id":2019}
Session Attrs = {}
Postman을 이용한 요청 테스트
코드 참조
https://github.com/mike6321/Spring/tree/master/SpringMVC/demo-boot-web