一尘不染

设置Jackson功能WRITE_DATES_AS_TIMESTAMPS在Spring Boot中不起作用

spring-boot

我将spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false在Spring Boot配置,但杰克逊仍然串行产生[1942,4,2],而不是"1942-04-02"一个DateTime值。

一些调试快照

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

  • 但是在a的序列化过程中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=falsespring.jackson.serialization.write-dates-as-timestamps=false因为我发现很多地方都提到了这一点(即使Boot文档没有对此进行提示)。那这个呢?它们似乎是同义词-没有效果。
  • 在写这个问题时,SO建议WRITE_DATES_AS_TIMESTAMPS在Springboot1.3.5上不要唤醒。回答说,以取代WebMvcConfigurationSupportWebMvcConfigurerAdapter。虽然确实可以帮助我,但我不明白为什么会这样。

阅读 2658

收藏
2020-05-30

共1个答案

一尘不染

Spring Boot将WebMvcConfigurationSupportBean 的存在指示为您要完全控制Spring
MVC的配置。通常,您最终会通过使用来获得这样的bean,@EnableWebMvc但是您也可以声明自己的bean或配置类,它是一个WebMvcConfigurationSupport

如果您继承WebMvcConfigurerAdapter而不是继承,那么您将对WebMvcConfigurationSupportSpring
Boot的Spring MVC自动配置进行附加更改,而不是完全接管。

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

2020-05-30