spring boot manual 第 65.3 节表示我可以通过提供自己的对象映射器来替换默认的 ObjectMapper。我没有使用 boot,只是一个构建为 .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;
}
以上内容位于肯定会加载的 @Configure bean 中。
我上面采取的方法在 Spring 3 中运行良好,但在升级到 4.2.2 时就不行了。我已阅读Jackson Integration Improvements也尝试了其中列出的方法,达到了相同的效果。
--克里斯
最佳答案
我一直这样做的方式是:
@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
}
}
一个警告,引用 WebMvcConfigurer.html#configureMessageConverters 的 JavaDoc :
Note that adding converters to the list, turns off default converter registration. To simply add a converter without impacting default registration, consider using the method extendMessageConverters(java.util.List) instead.
关于Spring 4(无启动)与自定义 Jackson ObjectMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33468598/