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

Mar*_*tör 7 serialization spring jackson spring-boot

我设置spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false了Spring Boot配置,但Jackson序列化器仍然生成[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" - >"false"

  • 然后稍后在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" - >"false"

  • 然而在序列化过程中DateTime com.fasterxml.jackson.datatype.jsr310.ser.JSR310FormattedSerializerBase#useTimestamp说错误因为provider.isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)返回错误.

试图修复

  • 出于绝望,我更换spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=falsespring.jackson.serialization.write-dates-as-timestamps=false因为我发现在很多地方都提到过(尽管Boot文档没有暗示这一点).那这个呢?它们似乎是同义词 - 没有效果.
  • 在写这个问题时,建议WRITE_DATES_AS_TIMESTAMPS不要在Spring boot 1.3.5上进行操作.回答说,以取代WebMvcConfigurationSupportWebMvcConfigurerAdapter.虽然这确实有帮助但我不明白为什么会这样.

And*_*son 11

Spring Boot将WebMvcConfigurationSupportbean作为一个指示,表明您希望完全控制Spring MVC的配置.您通常会使用这样的bean,@EnableWebMvc但您也可以声明自己的bean或配置类WebMvcConfigurationSupport.

如果你是子类WebMvcConfigurerAdapter而不是WebMvcConfigurationSupport你正在对Spring Boot的Spring MVC的自动配置进行附加更改而不是完全接管.

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

  • 为了澄清这一点,您还应该删除“@EnableWebMvc”注释。它解决了我的问题 (3认同)