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
};
}
}
我希望我的 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
};
}
}