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
'Spring > Spring MVC' 카테고리의 다른 글
(SERVLET) @RequestBody는 어떻게 동작할까? (4) | 2022.07.08 |
---|---|
(SERVLET) HTTP 메세지 컨버터 (2) - Json (0) | 2020.02.11 |
(SERVLET) 리소스 핸들러 (0) | 2020.02.10 |
(SERVLET) 핸들러 인터셉터(2) (0) | 2020.02.05 |
(SERVLET) 핸들러 인터셉터(1) (0) | 2020.02.05 |