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

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

【问题讨论】:

    标签: java spring-boot jackson


    【解决方案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 个时区,所以我不想每年更新两次代码
    猜你喜欢
    • 2016-12-24
    • 2011-12-02
    • 2021-03-31
    • 2017-10-30
    • 2017-09-09
    • 2018-01-24
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多