Spring[Message-Converter]
1. 메시지 컨버터란?
- XML 이나 JSON을 이용한 AJAX 기능이나 웹서비스 개발에 이용
- HTTP 요청 메세지 본문( Request Body ), HTTP 응답 메세지 본문( Response Body )을 통째로 메세지로 다루는 방식
- 파라미터의 @RequestBody, 메소드에 @ResponseBody를 이용
- 메세지 컨버터는 AnnotationMethodHandlerAdapter를 통해 하나 이상의 컨버터가 등록, 선택 동작하게 된다.
- 응답(Response)의 경우 해당 핸들러 메소드에 @ResponseBody 와 함께 반환되는 객체의 종류에 따라 메세지 컨버터가 선택되고 응답바디 내용이 채워져 브라우저로 전달된다.
2. 컨버터 등록
<!-- Validator, Conversion Service, Formatter Message Converter 설정 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean . . . />
<bean . . . />
</mvc:message-converters>
</mvc:annotation-driven>
<mvc:annotation-driven /> 에 mvc:message-conveters를 통해 여러 메시지 컨버터를 등
록 할 수 있다. 기본 등록된 메시지 컨버터들은 설정이 해제된다.
3. 종류
StringHttpMessageConverter :
- 스트링 타입 지원.
- 요청의 본문 내용을 그대로 가져올 수 있다.
- 응답에 콘텐츠 타입이 "text/html", 단순문자열로 응답할 수 있다.
[실습]
org.springframework.http.converter.StringHttpMessageConverter
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=UTF-8</value>
</list>
</property>
</bean>
MappingJacksonHttpMessageConverter :
- Jackson Object Mapper를 이용해서 자바 객체와 JSON 문서를 자동변환
- 제한은 없지만 프로퍼티를 가진 자바 빈 스타일 객체나 Map을 반환하면 정확한 JSON 문자열을 얻을 수 있다.
- 그 밖에 Jaxb2RootElementHttpMessageConverter MarShallingHttpMessageConverter 등이 XML 과 JSON 객체와의 변환을 도와주는 컨버터로 사용할 만하다.
4. AJAX 실습1
- pom.xml 에 jackson core library 추가
<!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.1</version> </dependency>
2. org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
application/json; charset=UTF-8
3. 예제
/assets/html/joinform.html의 id가 check-email 버튼 클릭의 이벤트 핸들러를 매핑한다.
$("#check-email").click( function(){
$.ajax( {
url : "/api/checkEmail,
type: "get",
dataType: "json",
data: "",
// contentType: "application/json",
success: function( response ){
console.log( response );
},
error: function( jqXHR, status, error ){
console.error( status + " : " + error );
}
});
});
4. kr.ac.smu.controller 패키지의 MCController 에 URL "/api/checkEmail"에 매핑된
메소드 checkEmail 를 다음 코드와 함께 작성한다.
@RequestMapping( "/api/checkEmail" )
@ResponseBody
public Object checkEmail() {
Map<String, Object> map = new HashMap<String, Object>();
map.put( "result", 1 );
map.put( "data", true );
return map;
}
5. http://localhost:8080/assets/html/joinform.html 에서 테스트!
'Dev > Spring' 카테고리의 다른 글
Spring[Interceptor-Annotation활용] (0) | 2021.10.16 |
---|---|
Spring [DefaultServlet-ViewResolver-Exception] (0) | 2021.10.16 |
Spring @MVC, Data Access, MyBatis (0) | 2021.10.15 |
Spring 자세히 알아보기 DispatcherServlet , MVC (0) | 2021.10.15 |
Spring 시작하기 (0) | 2021.10.15 |