【发布时间】:2018-01-18 11:00:10
【问题描述】:
我在 Spring Boot 配置中设置了 spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false,但 Jackson 序列化程序仍然为 DateTime 值生成 [1942,4,2] 而不是 "1942-04-02"。
一些调试快照
-
在
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration.StandardJackson2ObjectMapperBuilderCustomizer#customize中有configureFeatures(builder, this.jacksonProperties.getSerialization());这表明“WRITE_DATES_AS_TIMESTAMPS”->“假”
-
然后在
org.springframework.http.converter.json.Jackson2ObjectMapperBuilder#configure稍后会有这个循环for (Object feature : this.features.keySet()) { configureFeature(objectMapper, feature, this.features.get(feature)); }this.features又说“WRITE_DATES_AS_TIMESTAMPS”->“假” 然而在
DateTime的序列化过程中,com.fasterxml.jackson.datatype.jsr310.ser.JSR310FormattedSerializerBase#useTimestamp显示为 false,因为provider.isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)返回 false。
尝试修复
- 出于绝望,我将
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false替换为spring.jackson.serialization.write-dates-as-timestamps=false,因为我发现很多地方都提到了这一点(尽管Boot documentation 没有暗示这一点)。那这个呢?它们似乎是同义词 - 没有效果。 - 在写这个问题时建议WRITE_DATES_AS_TIMESTAMPS not woking on Spring boot 1.3.5。答案是用
WebMvcConfigurerAdapter替换WebMvcConfigurationSupport。虽然这确实有帮助,但我不明白为什么会这样。
【问题讨论】:
-
这最后一句话是对原始问题的实际答案。
标签: spring spring-boot serialization jackson