【问题标题】:Globally configure Jackson to serialize Date's in UTC全局配置 Jackson 以在 UTC 中序列化日期
【发布时间】:2020-09-22 18:51:17
【问题描述】:

我有一个带有 API 的 Spring Boot 应用程序。一些端点返回带有从OffsetDateTime 序列化的数据的响应。其中一些日期来自数据库,而其他日期是在运行时生成的 (OffsetDateTime.now()),这导致 OffsetDateTime 具有不同的时区。我喜欢在我的 API 上继续使用 OffsetDateTime 来响应时区,但我希望从我的 API 序列化的所有日期都在同一个时区——在我的情况下是 UTC。我怎样才能全局配置 Jackson 来做到这一点?

【问题讨论】:

  • 您使用的是哪个数据库?
  • 您通常如何序列化OffsetDateTime 字段?你在用@JsonFormat吗?
  • @Andreas 我试过使用@JsonFormat(timezone = "UTC"),但没有用

标签: java spring spring-boot jackson


【解决方案1】:

Spring Boot 属性:

spring.jpa.properties.hibernate.jdbc.time_zone=UTC
spring.jackson.time-zone=UTC

JVM 默认时区:

@PostConstruct
void started() {
  TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

【讨论】:

  • setDefault 使我使用 OffsetDateTime.now() 创建的 OffsetDateTimes 处于 UTC,这使得它们在使用 Jackson 序列化时成为 UTC。这很好,但如果我以某种方式在另一个时区创建了一个 OffsetDateTime,它仍然会在那个时区返回。 Spring Boot 属性似乎无法正常工作。
猜你喜欢
  • 2016-07-01
  • 2011-11-23
  • 2011-12-02
  • 2020-08-22
  • 2019-05-02
  • 2019-04-03
  • 1970-01-01
  • 2016-12-24
  • 2019-12-31
相关资源
最近更新 更多