Spring boot - Jackson 日期序列化和反序列化

Posted

技术标签:

【中文标题】Spring boot - Jackson 日期序列化和反序列化【英文标题】:Spring boot - Jackson date serialization and deserialization 【发布时间】:2019-04-03 12:29:52 【问题描述】:

在 Spring Boot 中,序列化和反序列化由 Jackson 执行。默认情况下,Jackson 通过将日期转换为 GMT 时区来序列化日期,并且在反序列化时,它希望日期处于 GMT 时区,因此它将它们转换为本地时区。但是,就我而言,我们有 2 个时区,EET 和 EEST。我们目前不在夏天,杰克逊正在以相同的操作和相同的请求将一个日期反序列化到 EET 和另一个到 EEST。这是什么原因以及如何解决?

【问题讨论】:

【参考方案1】:

我们最终为所有应用程序使用了统一的 GMT 时区。我们强制 Spring 在运行时将 GMT 设置为应用程序时区。代码:

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

【讨论】:

酷...始终建议为数据库保留 UTC。并在从服务器获取后转换为用户的时区。【参考方案2】:

通过传递时区尝试使用下面的反序列化。

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone="America/Phoenix")
private Date date;

【讨论】:

问题是我们在我国有 2 个时区,所以我不想每年更新两次代码

以上是关于Spring boot - Jackson 日期序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 和 Jackson 的日期时区

Spring Boot Jackson 日期和时间戳格式

Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。

Spring boot - Jackson 日期序列化和反序列化

spring-boot:对日期(Date)类型数据的序列化

spring-boot:对日期(Date)类型数据的序列化