TIL

HttpMessageConverter

oceanflow 2025. 2. 21. 22:17

HttpMessageConverter는 HTTP 요청과 응답의 데이터 변환을 처리하는 스프링 MVC의 핵심 기능이다.

HttpMessageConverter는 HTTP Message Body의 내용을 읽거나 쓸 때 사용되며, 주로 JSON 데이터나 문자열을 처리할 때 활용한다.

 

HttpMessageConverter가 적용되는 경우는 다음과 같다.

1. HTTP 요청 : @RequestBody, HttpEntity<>, RequestEntity<>

2. HTTP 응답 : @RequestResponse, HttpEntity<>, ResponseEntity<>

요청과 응답 모두 사용된다.

 

Spring은 다양한 HttpMessageConverter를 제공하고 있으며 우선순위가 있다.

대상 Class와 MediaType을 체크하여 어떤 Convert를 사용할지 결정한다.

 

대표적으로 ByteArrayHttpMessageConverter, StringHttpMessageConverter, MappingJackson2HttpMessageConverter가 있으며 우선순위와 설명은 다음과 같다.

 

1. ByteArrayHttpMessageConverter

    byte[] 데이터 처리

    미디어 타입: */*

    클래스 타입: byte[]

 

2. StringHttpMessageConverter

    String 데이터 처리

    미디어 타입: */*

    클래스 타입: String

 

3. MappingJackson2HttpMessageConverter

    JSON 데이터 처리

    미디어 타입: application/json

    클래스 타입: 객체 또는 HashMap

 

HTTP 요청 데이터 읽는 과정

 

1. @RequestBody 또는 HttpEntity 파라미터를 확인

2. canRead() 메서드로 해당 컨버터가 메시지를 처리할 수 있는지 확인

3. 조건 만족시 read() 메서드를 호출하여 객체 생성 및 반환

 

HTTP 응답 데이터 생성 과정

1. 컨트롤러에서 @ResponseBody 또는 HttpEntity 반환 시 동작

2. canWrite() 메서드로 컨버터 적합성 확인

3. write() 메서드를 통해 HTTP 응답 메시지 바디에 데이터 생성