본문 바로가기

Spring/Spring MVC

(SERVLET) HTTP 메세지 컨버터 (1)

HTTP 메시지 컨버터란?

요청 본문에서 메시지를 읽어 들이거나(@RequestBody), 응답 본문에 메시지를 작성할 때(@ResponseBody) 사용한다.

@GetMapping("/message")
public @ResponseBody String message (@RequestBody Person person) {
    return "hello person";
}
  • 위의 코드의 @RequestBody는 요청 본문을 Person 객체로 컨버전한다.
  • @ResponseBody는 리탄 값 ("hello person")을 응답 본문에 작성한다.

@RestController를 사용하면 모든 핸들러 메서드에 @ResponseBody가 있는 거나 마찬가지다.

 

@ResponseBody는 원래 메서드 위에 작성하지만 리턴 타입과 관련이 있기 때문에 위와 같이 작성하는 것이다.


기본 HTTP 메시지 컨버터 (괄호는 의존성이 있는 경우에 해당)

  • 바이트 배열 컨버터

  • 문자열 컨버터

  • Resource 컨버터

  • Form 컨버터 (폼 데이터 to/from MultiValueMap <String, String>)

  • (JAXB2 컨버터)

  • (Jackson2 컨버터)

  • (Jackson 컨버터)

  • (Gson 컨버터)

  • (Atom 컨버터)

  • (RSS 컨버터)

  • ...

@GetMapping("/message")
public @ResponseBody String message (@RequestBody String body) {
    return body;
}

테스트 코드 작성

@Test
public void stringMessage() throws Exception {
    this.mockMvc.perform(get("/message")
            .content("hello"))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(content().string("hello"));
}

실행결과


설정 방법

  • 기본으로 등록해주는 컨버터에 새로운 컨버터 추가하기: extendMessageConverters

extendMessageConverters에 추가하면 기본 컨버터를 사용할 수 없다.

* Configure the {@link HttpMessageConverter HttpMessageConverters} to use for reading or writing
* to the body of the request or response. If no converters are added, a
* default list of converters is registered.
* <p><strong> Note </strong> that adding converters to the list, turns off
* default converter registration. To simply add a converter without impacting
* default registration, consider using the method
  • 기본으로 등록해주는 컨버터는 다 무시하고 새로 컨버터 설정하기: configureMessageConverters

  • 의존성 추가로 컨버터 등록하기 (추천)

    • 메이븐 또는 그래 들 설정에 의존성을 추가하면 그에 따른 컨버터가 자동으로 등록된다.

    • WebMvcConfigurationSupport

    • (이 기능 자체는 스프링 프레임워크의 기능임, 스프링 부트 아님.)


코드 참조

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