我使用的是 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的新手,所以这很有挑战性!
您可以使用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声明为静态字段吗?),这促使我