본문 바로가기

Spring/Spring MVC

(SERVLET) HTTP 메세지 컨버터 (2) - Json

 

WebMvcConfigurationSupport.Class > addDefaultHttpMessageConverters 

위와 같이 분기에 따라서 해당 컨버터를 추가한다.

 

해당 컨버터가 있는지 없는지는 어떻게 판단하는가?

ClassUtils로 풀 패키지 경로에 해당하는 클래스가 있는지 없는지로 판단

즉 classPath에 해당하는 라이브러리가 등록되어 있는 경우에만 메시지 컨버터를 등록해준다.

 

 

예를 들어서 jackSon2는 SpringBoot가 기본적으로 제공해준다.

json이 기본적으로 jackson을 가지고 있다.


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

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com