设置杰克逊功能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” - > “假” 不过的
DateTime
com.fasterxml.jackson.datatype.jsr310.ser.JSR310FormattedSerializerBase#useTimestamp
serialzation时说假的,因为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并不在此提示)提及。那这个呢?他们似乎是同义词 - 没有效果。 - 在写这个问题时,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.*
配置设置的影响。