HTTP 메시지 컨버터는 HTTP 메시지 바디의 내용을 객체로 변환하거나 혹은 그 반대로 변환하는 역할을 담당한다.
스프링 MVC는 다음의 경우에 메시지 컨버터를 사용한다.
HttpMessageConverter 인터페이스
package org.springframework.http.converter;
public interface HttpMessageConverter<T> {
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}
스프링 부트 기본 메시지 컨버터
0 = ByteArrayHttpMessageConverter
1 = StringHttpMessageConverter
2 = MappingJackson2HttpMessageConverter
byte[]
, 미디어 타입: */*
application/octet-stream
이 지정됨.String
, 미디어 타입: */*
text/plain
이 지정됨.application/json
application/json
이 지정됨.@RequestMapping
을 사용하는 컨트롤러의 메소드는 HttpServletRequest, Model, HttpEntity은 물론이고, @RequestParam , @ModelAttribute, @RequestBody 같은 어노테이션을 이용하여 생성된 객체까지 매우 다양한 파라미터를 주입받아 사용할 수 있다.
@RequestMapping
을 사용하는 컨트롤러의 메소드의 파라미터로 주입해주기 때문이다.ArgumentResolver
public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
@Nullable
Object resolveArgument(MethodParameter parameter,
@Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
@Nullable WebDataBinderFactory binderFactory) throws Exception;
}
HTTP 메시지 컨버터
@RequestBody
를 처리하는 ArgumentResolver와 HttpEntity
를 처리하는 ArgumentResolver가 HTTP 메시지 컨버터를 호출해 파라미터에 넘길 객체를 생성한다.
@ResponseBody
와 HttpEntity
를 처리하는 ReturnValueHandler가 HTTP 메시지 컨버터를 호출해서 응답 결과를 만든다.
기능 확장