Spring 4(无启动)与自定义 Jackson ObjectMapper

标签 spring jackson jodatime

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/

相关文章:

java - RestTemplate JSON 反序列化

spring - session 中存储的域对象变得分离

java - 将解析后的 XML 对象加载到 Spring 上下文中

java - 在 Java 中计算今天和格式为 yyyy/mm/dd 的字符串之间的天数

java - 无法打开 JPA EntityManager 进行交易;嵌套异常是 javax.persistence.PersistenceException

java - 无法使用 Jackson 反序列化实例

java - 从 Java 7 到 Java 8 的 Jackson Object Mapper 版本化问题

java - 在 GSON/Jackson 中以不同的方式序列化同一类的每个引用

java - 将 EDT/EST 转换为 UTC

java - 获取java不同结果中两个日期之间的日期列表