1. HTTP Message Converter 소개
- Spring Framework의 HTTP Message Converter는 HTTP 요청과 응답의 본문을 자바 객체로 변환하거나, 자바 객체를 HTTP 응답 본문으로 변환하는 인터페이스입니다.
spring-web모듈에 포함된HttpMessageConverter인터페이스는InputStream과OutputStream을 통해 HTTP 요청과 응답의 본문을 읽고 쓰는 기능을 제공합니다.- HTTP Message Converter는 클라이언트 측(예: RestClient, RestTemplate)과 서버 측(예: Spring MVC REST 컨트롤러)에서 모두 사용됩니다.
1.1 주요 특징
- 다양한 미디어 타입(MIME 타입)에 대한 구체적인 구현체가 프레임워크에 기본 제공됩니다.
- 클라이언트 측에서는 RestClient와 RestTemplate에 기본적으로 등록됩니다.
- 서버 측에서는 RequestMappingHandlerAdapter에 기본적으로 등록됩니다.
- 각 컨버터는 기본 미디어 타입을 가지고 있으며,
supportedMediaTypes속성을 설정하여 재정의할 수 있습니다.
1.2 HttpMessageConverter 인터페이스
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(): 메시지 컨버터가 해당 클래스, 미디어타입을 지원하는지 체크합니다.
- getSupportedMediaTypes(): 메시지 컨버터가 지원하는 미디어 타입을 반환합니다.
- read(), write(): HTTP 요청과 응답의 본문을 읽고 쓰는 메서드입니다.
1.3 동작 과정
HTTP 요청/응답 처리 과정
요청 데이터 읽기
- 컨트롤러에서 HttpEntity나 @RequestBody를 사용할 때 메시지 컨버터가 동작
- 메시지 컨버터는 다음 조건을 확인하여
canRead()호출:- 대상 클래스 타입을 지원하는지 (byte[], String, HelloData 등)
- HTTP 요청의 Content-Type 미디어 타입을 지원하는지 (text/plain, application/json, / 등)
- 조건이 만족되면
read()메서드를 호출하여 객체를 생성하고 반환