2014-06-06 1 views
1

Jackson을 사용하여 클라이언트 요청에서 JSON 문자열을 Java 객체로 역 직렬화하고 FlexJson을 사용하여 Java 객체를 응답으로 직렬화하고자합니다.Spring MVC : 들어오는 요청에 Jackson을 사용하고 응답에 FlexJSON Serializer를 사용합니다.

간단히 말하면, 문제는 다음과 같습니다. 요청 처리와 응답이 아닌 잭슨 만 사용하도록 Spring을 설정하는 방법은 무엇입니까?

<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <beans:property name="messageConverters"> 
     <beans:list> 
      <beans:ref bean="jsonMessageConverter"/> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
</beans:bean> 

그리고 컨트롤러 : 서블릿의 context.xml에서

내가 가진

@RequestMapping(value = "settings") 
public @ResponseBody String getSomeData(@RequestBody UserData userData) { 
    // userData is automatically deserialized by Jackson 
    MyView viewForClient = new MyView(userData);   

    return new JSONSerializer().include(MyView.SERILIZABLE_FIELDS).exclude("*", "*.class").serialize(viewForClient); // here I don't want Jackson to handle the response   
} 

그러나이 방법 잭슨은 이미 FlexJSON에 의해 ​​변환 된 응답을 JSON으로 변환 나는 원하지 않는다.

해결책이 있습니까? 감사.

답변

1

직렬화 방법으로 Jackson을 연결하는 경우 사용자 정의 MappingJackson2HttpMessageConverter bean을 만들고 직렬화 방법으로 FlexJSON을 빌드 할 수 있어야합니다.

+1

그래, 그럴 수도 있지만, 이미 더 나은 방법을 찾았습니다. Spring은 기본 HttpRequestConverter 인스턴스가 미리 활성화되어 있으며 요청 Content-Type에 따라 편리한 HttpRequestConverter 인스턴스를 사용합니다. 그래서 제 경우에는 Jackson 종속성을 프로젝트에 추가하고 application/json 콘텐츠 유형으로 요청을 보내면됩니다. 이로 인해 Jackson은 요청 본문에서 데이터를 읽고 역 직렬화하여 객체를 만듭니다. 그리고 응답은 잭슨에 의해 처리되지 않습니다. –

+0

여기에 잭슨 2 병이 추가되었으며, (at) RequestBody YourDomainObject yourDomainObject와 jackson 같은 일을하게됩니다. 귀하의 YourDomainObject를 반환하려고 시도한 경우 역방향이 ResponseBody (at) ResponseBody와 함께 적용되지만 상상해보십시오. 그렇지만 flexjson을 사용하는 경우 ResponseEntity 을 반환 할 가능성이 가장 높습니다. 잭슨 처리를 트리거하는 것처럼 보입니다. – chrismarx

관련 문제