HTTP Message Converter는 Spring Framework에서 클라이언트와 서버 간의 HTTP 요청 및 응답 데이터를 변환하는 데 사용됩니다. 주로 컨트롤러의 매개변수 또는 리턴값 을 HTTP 메시지의 Body로 변환하거나 그 반대로 변환합니다.
Spring MVC는 기본적으로 다양한 Message Converter를 제공하며, JSON, XML, 문자열 등 여러 형식의 데이터를 처리할 수 있습니다.
컨트롤러에서 데이터를 반환하거나 클라이언트로부터 데이터를 받을 때 다음과 같은 과정을 거칩니다:
1. 요청 데이터를 읽어 Java 객체 로 변환 (Request Body → Java 객체)
2. Java 객체를 HTTP 응답으로 변환 (Java 객체 → Response Body)
Spring MVC는 요청/응답의 Content-Type과 Accept 헤더 를 확인해 적합한 Message Converter를 선택합니다.
Spring은 여러 기본 구현체를 제공하여 다양한 데이터 형식을 처리할 수 있습니다.
application/json text/plain application/x-www-form-urlencoded application/xml 클라이언트가 JSON 데이터를 서버로 보낼 때, HTTP Message Converter는 이를 Java 객체로 변환합니다.
예제:
@PostMapping("/users")
public ResponseEntity<String> createUser(@RequestBody User user) {
// HTTP 요청 Body의 JSON을 User 객체로 변환
userService.save(user);
return ResponseEntity.ok("User created successfully");
}
{
"id": 1,
"name": "John Doe"
}서버가 Java 객체를 JSON으로 변환해 클라이언트로 응답을 보냅니다.
예제:
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user); // User 객체를 JSON으로 변환
}
{
"id": 1,
"name": "John Doe"
}기본 제공 Converter 외에 특정 요구사항이 있는 경우 사용자 정의 Converter를 구현할 수 있습니다.
HttpMessageConverter 인터페이스를 구현해 직접 등록합니다.
예제:
public class CustomMessageConverter implements HttpMessageConverter<MyCustomObject> {
@Override
public boolean canRead(Class<?> clazz, MediaType mediaType) {
return clazz == MyCustomObject.class;
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return clazz == MyCustomObject.class;
}
// 읽기 및 쓰기 로직 구현
}
커스텀 Converter 등록:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new CustomMessageConverter());
}
}