【问题标题】:Define an custom jackson objectmapper for a spring3 mvc project为 spring 3 mvc 项目定义自定义 jackson objectmapper
【发布时间】:2011-07-12 17:34:30
【问题描述】:

我正在使用 mvc:annotation-driven 这意味着只需将 jackson jar 文件放到配置 Jackson json marhsaller 的类路径中。现在我想提供一个自定义对象映射器,以便能够在全局级别控制日期字段的序列化。

我开始定义 AnnotationMethodhandlerAdapter 并引用了我自己的 jsonConverter bean(见下文)

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jsonConverter" />
            <ref bean="xmlMarshallingConverter" />
        </list>
    </property>
</bean>

问题是日期仍然写为时间戳。创建了自定义 objectmapper bean(为此获取日志),但似乎从未使用过 objectmapper。我假设它仍然使用默认的 MappingJacksonHttpMessageConverter 和默认的 ObjectMapper。

有什么想法吗?我如何确定要覆盖哪些确切的 bean 来更改默认映射器?

谢谢!

【问题讨论】:

  • 你在用@ResponseBody吗?

标签: json spring jackson


【解决方案1】:

您是否已将视图解析器配置为也使用您的自定义对象映射器实例(请参阅下面的 jacksonObjectMapper 参考)?

据我了解,AnnotationMethodHandlerAdapter 处理入站转换,而 ContentNegotiatingViewResolver 处理出站转换。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json"/>
            <!-- xml etc -->
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <property name="objectMapper" ref="jacksonObjectMapper"/>
            </bean>
            <!-- xml etc -->
        </list>
    </property>
</bean>

【讨论】:

  • 我认为通过使用 @ResponseBody 注释将使用 HttpMessageConverters,而不是视图解析器。
  • 一秒:这是否意味着 ContentNegotiatingViewResolver 已自动设置?我没有具体说明。我只是使用普通的
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2021-01-02
相关资源
最近更新 更多