设置杰克逊功能WRITE_DATES_AS_TIMESTAMPS Spring不启动

问题描述:

我在春天引导配置设置spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false但杰克逊仍然串行产生[1942,4,2]而不是"1942-04-02"DateTime价值的工作。设置杰克逊功能WRITE_DATES_AS_TIMESTAMPS Spring不启动

一些调试快照

  • 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” - > “假”

  • 不过的DateTimecom.fasterxml.jackson.datatype.jsr310.ser.JSR310FormattedSerializerBase#useTimestamp serialzation时说假的,因为provider.isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)返回false。

试图调整

  • 从绝望中我换成spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=falsespring.jackson.serialization.write-dates-as-timestamps=false,因为我发现,在很多地方(即使Boot documentation并不在此提示)提及。那这个呢?他们似乎是同义词 - 没有效果。
  • 在写这个问题时,SO建议WRITE_DATES_AS_TIMESTAMPS not woking on Spring boot 1.3.5。答案表示用WebMvcConfigurerAdapter代替WebMvcConfigurationSupport。虽然这确实有助于我不明白为什么如此。

Spring Boot将存在一个WebMvcConfigurationSupport bean,表示您希望完全控制Spring MVC的配置。您通常会使用@EnableWebMvc来结束这样的bean,但您也可以声明自己的bean或配置类,它是WebMvcConfigurationSupport

如果你子类WebMvcConfigurerAdapter而不是WebMvcConfigurationSupport你正在对Spring Boot的Spring MVC自动配置做一个附加改变,而不是完全接管。

Spring Boot的Spring MVC自动配置的一部分是将其配置为使用自动配置的ObjectMapper进行HTTP消息转换。如果您关闭Boot的自动配置Spring MVC,它将使用自己的独立ObjectMapper,该配置不受任何spring.jackson.*配置设置的影响。