【问题标题】:How to stop Jackson altering datetimes when deserialising them如何在反序列化时阻止杰克逊更改日期时间
【发布时间】:2018-12-28 19:48:23
【问题描述】:

我正在尝试通过对我的 Spring Boot 应用程序的获取请求来检索具有日期字段的对象。数据库中的日期正确,调试时正确,但杰克逊反序列化时更改了 1 小时。

在课堂上

@JsonFormat(pattern = "dd-MM-yyyy HH:mm")
private Date matchDate;

在 application.properties 中

spring.jackson.deserialization.adjust-dates-to-context-time-zone=false

我不知道它为什么要改变它们,我希望 jackson 完全按原样反序列化日期

【问题讨论】:

  • 您的计算机使用的是哪个时区,您的数据库使用的是哪个时区?
  • Date 没有任何时区信息。因此,您可能会看到这个问题。
  • 假设我告诉你我不相信你。请不要被冒犯,而是向我们展示一个我们都可以尝试并非常清楚地证明我错了的例子。该示例将获取并显示原始格式的日期,打印它,然后获取最终格式的日期,然后打印它。
  • 您是说 Jackson “反序列化”您的对象,但实际上它应该是 serialising 从数据库读取并通过 HTTP 传递时。话虽如此,我认为 adjust-dates-to-context-time-zone 不会影响您看到的行为,因为它仅用于反序列化。

标签: java date spring-boot jackson


【解决方案1】:

该设置的文档说,

"如果启用,上下文 TimeZone 将基本上覆盖任何其他 时区信息;如果禁用,它将仅在值时使用 本身不包含任何时区信息。”

因此,由于您的序列化格式不指示时区,因此该设置不会影响您的反序列化。

我的建议是,如果可能,在传递序列化日期时始终包含时区 - 这样,如何解释值就没有问题了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 2017-04-25
    • 2019-08-04
    • 1970-01-01
    • 2018-02-26
    • 2019-07-05
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多