杰克逊将日期序列化为时间戳

时间:2018-09-19 16:31:45

标签: spring spring-boot jackson

我已经将Spring Boot项目从1.5.8升级到2.0.4。我注意到,以前我们所有的日期都作为时间戳返回,这很好。由于升级的日期是作为日期显示的,为了再次将它们作为时间戳取回,我在yml文件中添加了以下内容:

jackson:
  serialization:
    write-dates-as-timestamps: true

现在所有日期都将作为日期返回。不知道为什么。我们有一个配置类,其中定义了jacksonMessageConverter bean(在转换RabbitMq的消息时需要),不确定是否以某种方式干扰了转换?

非常感谢任何帮助

public class ApplicationConfig{
    @Bean
    public AuditorAware<String> auditorProvider() {
        return new AuditorAwareImpl();
    }

    @Bean
    public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new 
        CachingConnectionFactory(<host>);
        connectionFactory.setUsername(<user>);
        connectionFactory.setPassword(<pas>);
        connectionFactory.setVirtualHost(<vhost>);
        return connectionFactory;
    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        return new RabbitTemplate(connectionFactory());
    }

更新:

此后,我在config类中添加了以下内容,现在它可以正常工作了,为什么有这个想法?为何它不只是从spring boot属性中获得呢?

@Bean
    public Jackson2ObjectMapperBuilder objectMapperBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return builder;
    }

在我已定义格式的日期字段上不起作用,如何解决此问题?:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")  

1 个答案:

答案 0 :(得分:2)

应该不是:

spring:
  jackson:
    serialization:
      write-dates-as-timestamps: true

您是否缺少spring前缀?