+-
设置Jackson功能WRITE_DATES_AS_TIMESTAMPS在Spring Boot中不起作用
我在 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 there’s

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.答案是将WebMvcConfigurationSupport替换为WebMvcConfigurerAdapter.虽然这确实有帮助但我不明白为什么会这样.

最佳答案
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.*配置设置的影响.

点击查看更多相关文章

转载注明原文:设置Jackson功能WRITE_DATES_AS_TIMESTAMPS在Spring Boot中不起作用 - 乐贴网