如何在 Jackson 的 ObjectMapper 上添加 Jdk8Module

我正在使用杰克逊 2.9.6。我有一个控制器,我试图在其中发送一个可选作为我的字段之一。当我收到控制器的响应时,我总是以这种格式得到它{"field":{"present":true}}(如这个问题所示)。


基本上我有一个 RestTemplate bean 配置如下:


<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">

    <property name="messageConverters">

        <list>

            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>

            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>

        </list>

    </property>

</bean>

我想添加 Jdk8Module 作为序列化过程的一部分。我注意到有一个MappingJackson2HttpMessageConverter(ObjectMapper mapper)接受 ObjectMapper 的构造函数,我正在考虑创建一个 ObjectMapper bean,它将向其注册 Jdk8Module (使用registerModule(Module module)在 ObjectMapper 类中找到的公共方法),以便我可以像这样传递该模块:


<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">

    <property name="messageConverters">

        <list>

            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>

            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

                <constructor-arg name="objectMapper" ref="ObjectMapperWithJDK8Bean"></constructor-arg>

            </bean>

        </list>

    </property>

</bean>


<bean id="ObjectMapperWithJDK8Bean" class="com.fasterxml.jackson.databind.ObjectMapper">

* Pass in com.fasterxml.jackson.datatype.jdk8.Jdk8Module here via the method *

</bean>

但我当前面临的问题是registModule创建bean时如何从xml文件中调用方法?我正在使用 Spring 4.1。我是 Spring 新手,所以这非常具有挑战性!


慕雪6442864
浏览 155回答 1
1回答

一只萌萌小番薯

您可以使用 java 配置而不是 xml 创建一个 bean,例如:@Configurationpublic class GeneralConfiguration {     @Bean    public ObjectMapper objectMapper() {        ObjectMapper mapper = new ObjectMapper()           .registerModule(new ParameterNamesModule())           .registerModule(new Jdk8Module())           .registerModule(new JavaTimeModule());        return mapper;    }}我相信 @Configuration 和 @Bean 注释自spring 3.0以来都可用,因此您可以毫无问题地使用它们。如果您仍然希望继续使用基于 xml 的配置,那么:<bean id="objectMapper"    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">    <property name="modulesToInstall"        value="        com.fasterxml.jackson.datatype.jdk8.Jdk8Module,        com.fasterxml.jackson.datatype.jsr310.JavaTimeModule,        com.fasterxml.jackson.module.paramnames.ParameterNamesModule" /></bean>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java