无法将java.time.LocalDate序列化为与Jackson的字符串

时间:2015-10-05 15:27:16

标签: jackson spring-boot jsr310

我正在使用带有jackson 2.6.2的spring-boot 1.2.1.RELEASE,包括jsr310数据类型。我正在使用注释@SpringBootApplication启动我的Spring应用程序。我有

spring.jackson.serialization.write_dates_as_timestamps = false

在我的application.properties中设置(我知道正在阅读,因为我测试了banner = false)。

然而java.time.LocalDate仍被序列化为整数数组。我没有使用@EnableWebMvc。

看起来我是否添加了标签

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")

到我的LocalDate变量然后它工作。但我认为它是自动的,具有上述属性集。另外,如果我没记错的话(我刚刚决定使用整数数组),那只能用于序列化而不是反序列化(但我真的很清楚,如果最后一部分是真的那么)。

3 个答案:

答案 0 :(得分:5)

这是Spring Boot中的know issue。你需要手动完成。

angular.module('app')
.directive('time', ['timeUtil', 'timeEpoch', '$interval', function(timeUtil, timeEpoch, $interval) {
    return {
        restrict: 'A',
        scope: { date: '@' },

        link: function(scope, element) {        
            $interval(function() {
                var diff = timeEpoch.diff(scope.date); // calculate some time
                return element.text(timeUtil.dhms(diff)); // return formatted date to countdown
            }, 1000);
        }
   }
}])

或更新至1.2.2。

<强>更新 弹簧也会从容器中使用way to configure ObjectMapper

答案 1 :(得分:1)

我遇到了同样的问题,LocalDateTime被序列化为像[2019,10,14,15,7,6,31000000]这样的整数数组。我拥有的春季引导版本是1.5.13.RELEASE。我必须在用于解决此问题的JavaTimeModule上注册ObjectMapper。以下是为我工作的ObjectMapper配置:

@Bean
  public ObjectMapper getObjectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    mapper.registerModule(new JavaTimeModule());
    return mapper;
  }

答案 2 :(得分:0)

这个问题以奇怪的方式发生在我身上......使用不同的弹簧配置文件,其中一个返回了一个整数数组,另一个返回了预期的结果(年 - 月 - 日)。

在审核了我的配置后,问题是我的班级中缺少@Configuration和(可能)@Primary ...这不能解释为什么可以在不同的配置文件中工作,但这跟随设置解决了我的问题:

@Configuration
public class WebConfigurer {

    @Bean
    @Primary
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.build();
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        return objectMapper;
    }

}

当然,你仍然需要在pom.xml中使用JSR 310的依赖项。