Dev/Spring

Spring[Message-Converter]

OK-가자 2021. 10. 15. 11:06

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 :

  1. 스트링 타입 지원.
  2. 요청의 본문 내용을 그대로 가져올 수 있다.
  3. 응답에 콘텐츠 타입이 "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 :

  1. Jackson Object Mapper를 이용해서 자바 객체와 JSON 문서를 자동변환
  2. 제한은 없지만 프로퍼티를 가진 자바 빈 스타일 객체나 Map을 반환하면 정확한 JSON 문자열을 얻을 수 있다.
  3. 그 밖에 Jaxb2RootElementHttpMessageConverter MarShallingHttpMessageConverter 등이 XML 과 JSON 객체와의 변환을 도와주는 컨버터로 사용할 만하다.

4. AJAX 실습1

  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 에서 테스트!