当前位置: 首页 > 知识库问答 >
问题:

如何在 Jackson 的 ObjectMapper 上添加 Jdk8Module

柳鸿博
2023-03-14

我使用的是 Jackson 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作为序列化过程的一部分。我注意到有一个<code>MappingJackson2HttpMessageConverter(ObjectMapper mapper),这样我就可以传递该模块了:

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

但im目前面临的问题是,在创建bean时,如何从xml文件中调用< code>registModule方法?我用的是Spring 4.1。我是Spring的新手,所以这很有挑战性!

共有1个答案

孔棋
2023-03-14

您可以使用java config而不是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注释自Spring3.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>

阅读文档

 类似资料:
  • 我对ObjectMapper的工作方式和在应用程序中的一般使用感到满意。我想了解的是实现ObjectMapper的最佳方法,以确保它被重用,并且不会在应用程序中创建不必要的实例? 我的想法是我可以在一个Utils类中声明ObjectMapper,如下所示: 谢谢

  • 主要内容:1 ObjectMapper类的构造方法,2 ObjectMapper类的示例ObjectMapper是Jackson库的核心类。ObjectMapper提供用于在基本POJO(Java对象)之间或从通用JSON树模型(JsonNode)之间读取和写入JSON的功能,以及用于执行转换的相关功能。它也可以高度自定义,使用不同样式的JSON输出,并支持更高级的Object概念,例如多态。ObjectMapper还充当更高级ObjectReader和ObjectWriter类的工

  • Spring4.1实例化了Jackson实例。我有理由将该实例放入我的一个控制器中:该控制器使用Jackson进行一些小的JSON解析,但是它使用的应该是Spring本身使用的同一个实例。我该怎么做呢? 注意,我不是在问如何自定义配置Spring使用的;我对默认值很满意。我只想检索Spring out使用的实例,这样我就可以在自己的代码中重用现有的实例。

  • 我需要放心地配置底层的Jackson ObjectMapper。我正在使用REST Assured编写REST API测试,我需要定义一些过滤器来注册ObjectMapper,它用于将我的对象序列化到JSON: }

  • 问题内容: 我似乎无法正确注册我的Jackson ObjectMapper模块。 我正在使用Guice + Jersey + Jackson(FasterXML)堆栈。 我遵循了如何根据此处的各种问题来自定义ObjectMapper的方法。特别是,我声明了一个ContextResolver,分别标记为@ javax.ws.rs.ext.Provider和@ javax.inject.Singlet

  • 问题内容: 我对ObjectMapper的工作方式和应用程序的一般使用感到满意。我想了解的是实现ObjectMapper的最佳方法,以确保其被重用并且不会在应用程序内创建不必要的实例? 我的想法是,可以在Utils类中声明ObjectMapper,如下所示: 然后,我可以在不同的地方使用诸如以下代码来引用: 我遇到了另一个问题(我应该将杰克逊的ObjectMapper声明为静态字段吗?),这促使我