杰克逊 jsonformat 反序列化始终采用 UTC



杰克逊的jsonformat注释效果不如我预期。

让我们在Java SimpleDateFormat中说:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
Date date = sdf.parse("1-Mar-2018");

date对象值为 1-Mar-2018 SGT 。这很好,因为我的时区在新加坡。

现在我有一个发布 json 值的 http 网络服务:

{
  "filterDate": "01-Mar-2018"
}

在我的豆子里,我

@JsonFormat(pattern = "dd-MMM-yyyy")
public void setDeliveryDate(Date deliveryDate) {
    this.deliveryDate = deliveryDate;
}

好的,deliveryDate的值是1-Mar-2018 UTC

当我这样做时:

@JsonFormat(pattern = "dd-MMM-yyyy", timezone="Asia/Singapore")
public void setDeliveryDate(Date deliveryDate) {
    this.deliveryDate = deliveryDate;
}

它仍然被反序列化为1-Mar-2018 UTC,我认为它应该是1-Mar-2018 SGT的。

为什么会这样?

timezone参数用于根据 JsonFormat 文档进行序列化,而不是像您的帖子中那样用于反序列化。我不明白它如何用于反序列化,因为 Date"旨在反映协调的世界时 (UTC(">并且不包含时区信息。

如果要为 deliveryDate 指定时区,请考虑切换到 ZonedDateTime(从 Java 8 开始可用(。

如果必须使用Date则可以指定默认时区,该时区将在打印或格式化任何Date对象时使用,例如

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Singapore"));
System.out.println(new Date());

生产

周二 3月 06 21:15:12 SRET 2018

相关内容

  • 没有找到相关文章

最新更新