为 spring3 mvc 项目定义自定义 jackson objectmapper

发布于 2024-10-21 08:56:30 字数 761 浏览 3 评论 0原文

我正在使用 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>

问题是日期仍然被写为时间戳。自定义对象映射器 bean 已创建(已获取日志),但似乎从未使用对象映射器。我假设它仍然使用默认的 MappingJacksonHttpMessageConverter 和默认的 ObjectMapper。

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

谢谢!

I am using mvc:annotation-driven which meant that simply puttin the jackson jar files onto the classpath configured the Jackson json marhsaller. Now I would like to provide a custom object mapper to be able to control the serialization of Date fields on a global level.

I began to define the AnnotationMethodhandlerAdapter and referenced my own jsonConverter bean (see below)

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

The problem is dates are still written as timestamps. The custom objectmapper bean is created (got logs for that), but it seesm the objectmapper is never used. I assume it still uses the default MappingJacksonHttpMessageConverter and the default ObjectMapper.

Any ideas? How would I figure out what exact beans to overwrite to chagne the default mapper?

Thanx!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

峩卟喜欢 2024-10-28 08:56:30

您是否将视图解析器配置为也使用自定义对象映射器实例(请参阅下面对 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>

Have you configured the view resolver to also use your custom object mapper instance (see reference to jacksonObjectMapper below)?

It's my understanding that AnnotationMethodHandlerAdapter handles the inbound conversions and ContentNegotiatingViewResolver handles outbound conversions.

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文