[Spring] MessageConverter 정의 및 종류 ( + GET, POST의 경우)
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