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 的日期时区
Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。