杰克逊的jsonformat
注释并不像我预期的那样。
让我们说在Java SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
Date date = sdf.parse("1-Mar-2018");
date
对象值是1-Mar-2018 SGT
。这很好,因为我的时区在新加坡。
现在我有一个发布json值的http web服务:
{
"filterDate": "01-Mar-2018"
}
在我的bean中,我用它来注释它
@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 documentation进行序列化,而不是用于您的帖子中的反序列化。鉴于Date“旨在反映协调世界时(UTC)”并且不包含时区信息,我不知道它如何用于反序列化。
如果要为ZonedDateTime指定时区,请考虑切换到自Java 8以来可用的deliveryDate
。
如果必须使用Date
,则可以指定在打印或格式化任何Date
对象时使用的默认时区。
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Singapore"));
System.out.println(new Date());
产生
星期二2018年3月6日二十一点15分12秒