为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Jackson 的 ObjectMapper 上添加 Jdk8Module

如何在 Jackson 的 ObjectMapper 上添加 Jdk8Module

慕雪6442864 2023-10-13 14:52:49
我正在使用杰克逊 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 新手,所以这非常具有挑战性!
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您可以使用 java 配置而不是 xml 创建一个 bean,例如:


@Configuration

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


查看完整回答
反对 回复 2023-10-13
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信