【问题标题】:Spring MVC: using Jackson for incoming requests and FlexJSON Serializer for responsesSpring MVC:使用 Jackson 处理传入请求,使用 FlexJSON Serializer 处理响应
【发布时间】:2014-07-27 19:30:42
【问题描述】:

我想使用 Jackson 将 JSON 字符串从客户端请求反序列化为 Java 对象,并使用 FlexJson 序列化 Java 对象以进行响应。

简而言之,问题是:如何设置 Spring 以仅将 Jackson 用于请求处理而不用于响应?

在 servlet-context.xml 我有:

<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> 

在控制器中:

@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        
}

但这样,Jackson 也将我不想要的 FlexJSON 已转换的响应转换为 JSON。

有什么解决办法吗?谢谢。

【问题讨论】:

    标签: json spring-mvc serialization jackson flexjson


    【解决方案1】:

    您应该能够构建一个自定义 MappingJackson2HttpMessageConverter bean,在其中插入 Jackson 用于序列化方法,并插入 FlexJSON 用于反序列化方法。

    【讨论】:

    • 是的,这可行,但是我已经找到了更好的方法。 Spring 预先启用了许多默认的 HttpRequestConverter 实例,并根据请求的 Content-Type 使用方便的实例。因此,在我的情况下,只需在项目中添加 Jackson 依赖项并使用 application/json 内容类型发送请求就足够了。这会导致 Jackson 从请求正文中读取数据并反序列化为对象。 Jackson 不处理响应。
    • 这里也一样,只是添加了 jackson2 jar,然后您可以执行 (at)RequestBody YourDomainObject yourDomainObject 之类的操作,而 jackson 会执行此操作。我想如果您尝试返回 yourDomainObject,则相反的情况会通过 (at)ResponseBody 生效,但如果您使用的是 flexjson,那么您很可能返回一个似乎不会触发任何杰克逊处理的 ResponseEntity /跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2021-12-02
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多