이번에는 이전부터 계속 언급이 되었던 HTTP 메시지 컨버터에 대해 알아보려고 한다.
스프링 MVC는 메시지 바디에 맞춰서 알맞게 메시지 컨버터를 적용한다.
메시지 컨버터는 인터페이스로 이루어져있다.
package org.springframework.http.converter;
public interface HttpMessageConverter<T> {
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException;
}
canRead()와 canWrite() 를 통해서 메시지 컨버터가 해당 클래스, 미디어 타입을 지원하는지 체크할 수 있다.read()와 write()를 통해서 메시지 컨버터가 메시지를 읽고 쓸 수 있다.기본적으로 HTTP 메시지 컨버터는 요청과 응답에 둘 다 사용된다.
canRead()를 호출한다.
canRead() 조건에 만족되면 read()를 통해 객체를 생성하고 반환하게 된다.canWirte()를 호출한다.
canWrite() 조건에 만족되면 write()를 호출해 응답 메시지 바디에 데이터를 생성한다.ByteArrayHttpMessageConverter
byte[] / 미디어 타입 : **/**StringHttpMessageConverter
String / 미디어 타입 : */*MappingJackson2HttpMessageConverter
Object 또는 HashMap / 미디어타입 : application/json각 클래스 타입, 미디어 타입에 알맞는 메시지 컨버터가 선택되어 처리하게 된다.
그렇다면 이러한 메시지 컨버터는 어디서 실행이 되는 걸까?

그 위치는 바로 핸들러 어댑터 쪽에 있다.