Backend/Spring

[Spring] MessageConverter 정의 및 종류 ( + GET, POST의 경우)

saintclair 2024. 6. 3. 20:09

MessageConverter 정의 및 종류


 

정의

Spring framework에서 HTTP 요청 본문과 응답 본문을 java 객체로 변환하고 역으로 변환하는 역할을 담당하는 컴포넌트이다.

 

Spring MVC에서는 HTTP 요청이나 응답의 본문을 객체로 변환하거나, 객체를 HTTP 메시지로 변환하는데 사용된다.

주로 RESTful 웹 서비스에서 JSON이나 XML과 같은 형식의 데이터를 주고받을 때 사용한다.

 

@ResponseBody //응답
@RequestMapping(value="/hello", method=RequestMethod.POST)
public String hello(@RequestBody String param){ //요청
	return "result";
 }

 

위와 같이 어노테이션을 하게 되면 스프링은 messageConverter를 사용해 HTTP 요청이나 응답을 메세지로 변환하게 된다. 즉, 위처럼 파라미터 부분에 @RequestBody를 입력할 경우 파라미터 타입에 맞는(String) 메세지 컨버터를 선택한 뒤 HTTP 요청 본문을 통째로 메세지로 변환하여 파라미터에 바인딩하는 것이다.

 

*바인딩이란?

사용자가 웹 페이지의 폼에 입력한 데이터를 서버로 보낼 때, Spring MVC는 이 데이터를 컨트롤러의 메서드에 매개변수로 바인딩하여 처리한다. 이렇게 폼에서 입력한 데이터를 컨트롤러의 메서드에 매개변수로 바인딩하는 과정을 데이터 바인딩이라고 한다. 이 과정을 통해 사용자가 입력한 데이터를 컨트롤러에서 쉽게 사용할 수 있게 된다.

 

GET, POST 요청의 경우

  • GET : GET 방식의 요청에는 사용되지 않는다. 메시지 컨버터는 HTTP 요청의 본문(body)에 포함된 데이터를 처리하는 데 사용되는데, GET요청의 경우 본문이 없기 때문에 메시지 컨버터를 사용할 필요가 없다.
  • POST : POST 요청의 경우 요청 본문에 데이터를 담아 전송하기 때문에 이러한 데이터를 객체로 변환하기 위해 메시지 컨버터가 사용된다.

 

유용한 메시지 컨버터의 종류

 

  • Jaxb2RootElementHttpMessageConverter :

- Spring에서 XML 형식의 데이터를 처리하는 메시지 컨버터 중 하나이다.

- 이 메시지 컨버터는 java 객체를 XML로 변환하거나, XML을 java 객체로 변환하는 데 사용된다.

- @XmlRootElement와 @XmlType이 붙은 클래스를 이용한다.

- 지원하는 미디어 타입은 application/xml, application/*+cml, text/xml이다.

 

  • MashallingHttpMessageConverter

 

- 이 컨버터를 등록할 때는 maechaller와 unmarshaller를 설정파일에 등해줘야 한다.

- 지원하는 미디어 타입은 위와 동일.

- 주어진 XML 바인딩 프레임워크를 사용하여 java 객체와 XML 문서 간의 매핑을 수행한다. 

 

  • MappingJacksonHttpMessageConverter

- Jackson 라이브러리를 기반으로 작성되었으며 JSON 데이터와 Java 객체 간의 매핑을 수행한다.
- 지원하는 미디어 타입은 application/json이다.

- 변환하는 오브젝트 타입의 제한은 없지만 프로퍼티를 가진 자바빈 스타일이나 HashMap을 이용해야 정확한 변환 결과를 얻을 수 있다.

 

*설정 파일 등록

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 기본 메시지 컨버터 목록을 가져옴
        converters.add(new MappingJackson2HttpMessageConverter());
        // 다른 컨버터 등록하거나 기본 컨버터 삭제할 수도 있음
    }
}

 

 

 

참고 사이트/자세한 설명있음

https://joont92.github.io/spring/MessageConverter/

 

[spring] MessageConverter

앞서 우리가 HTTP 요청을 모델에 바인딩하고 클라이언트에 보낼 HTTP 응답을 만들기 위해 뷰를 사용했던 방식과는 달리, HTTP 요청 본문과 HTTP 응답 본문을 통째로 메세지로 다루는 방식이다. 주로 X

joont92.github.io