Spring Boot手册的Secton 65.3表明我可以通过提供我自己的来替换默认的ObjectMapper。我没有使用引导,只是一个构建为. war并在tomcat中运行的Spring WebMVC应用程序。
它实例化了我的ObjectMapper,但没有使用它。我使用调试器跟踪了为什么时间戳仍然显示为数字,发现它使用了不同的ObjectMapper实例。我不清楚它来自哪里,或者为什么这不会导致它只使用我的:
@Primary
@Bean
public ObjectMapper localObjectMapper() {
JodaMapper mapper = new JodaMapper();
mapper.setWriteDatesAsTimestamps(false);
mapper.getSerializationConfig().with(SerializationFeature.INDENT_OUTPUT)
.without(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS)
.without(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS)
.without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return mapper;
}
上面是在一个肯定要加载的@配置bean中。
我上面采用的方法在Spring 3中运行良好,只是在我使用4.2.2时没有。我也读过杰克逊集成改进,并尝试了那里列出的方法,效果相同。
克里斯
我总是这样做:
@Configuration
@EnableWebMvc
public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
@Bean
public ObjectMapper localObjectMapper() {
JodaMapper mapper = new JodaMapper();
// ...
return mapper;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJackson2HttpMessageConverter (localObjectMapper())); // use your own ObjectMapper
}
}
一个警告,引用WebMvcConfigrer. html#configureMessageConverters的JavaDoc:
请注意,将转换器添加到列表中,会关闭默认转换器注册。要简单地添加转换器而不影响默认注册,请考虑使用extendMessageConverters(java. util.List)方法。
在Spring 4中,我使用以下xml配置解决了
<bean name="jacksonObjectMapper"
class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="featuresToDisable">
<array>
<util:constant
static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS" />
</array>
</property>
</bean>
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
将其放在Servlet配置文件中,通常在
/WEB-INF/spring/appServlet/*. xml