Return Spring Boot 2 中带有自定义 ObjectMapper 的 ISO-8601 日期

Return ISO-8601 dates with custom ObjectMapper in Spring Boot 2

我希望我的 LocalDateTime 作为 ISO-8601 字符串(例如 "2020-10-12T10:57:15Z")从我的 Spring REST 控制器返回。这以前有效,但现在我使用的是自定义 Jackson2 ObjectMapper 这些日期改为作为数组返回:[2020, 10, 12, 10, 57, 15, 200000000].

为什么会发生这种情况,如何自定义 ObjectMapper 同时仍返回 ISO-8601 日期?

JacksonAutoConfiguration 创建一个 ObjectMapper 并关闭 WRITE_DATES_AS_TIMESTAMPS 功能,returns LocalDateTimes 作为 ISO-8601 字符串。当您提供自定义 ObjectMapper 时,此默认值 auto-configuration 将关闭。

这可以通过提供 Jackson2ObjectMapperBuilderCustomizer 而不是提供自定义 ObjectMapper 来解决。 JacksonAutoConfiguration 将使用此 bean 自定义 ObjectMapper,同时保持 auto-configured 行为,例如关闭 WRITE_DATES_AS_TIMESTAMPS 功能。

@Configuration
public class Config {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer() {
        return jacksonObjectMapperBuilder -> {
            // Customize the ObjectMapper while maintaining the auto-configuration
        };
    }
}