Java Jackson jsonformat始终以UTC进行反序列化

Java Jackson jsonformat始终以UTC进行反序列化,java,json,jackson,timezone,jackson2,Java,Json,Jackson,Timezone,Jackson2,Jackson的jsonformat注释并不像我预期的那样有效 让我们假设在JavaSimpleDataFormat中: SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); Date date = sdf.parse("1-Mar-2018"); 日期对象值为2018年3月1日SGT。这很好,因为我的时区在新加坡 现在我有了一个http Web服务,它发布了一个json值: { "filterDate": "01-Mar-

Jackson的
jsonformat
注释并不像我预期的那样有效

让我们假设在Java
SimpleDataFormat
中:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
Date date = sdf.parse("1-Mar-2018");
日期
对象值为
2018年3月1日SGT
。这很好,因为我的时区在新加坡

现在我有了一个http Web服务,它发布了一个json值:

{
  "filterDate": "01-Mar-2018"
}
在我的bean中,我用

@JsonFormat(pattern = "dd-MMM-yyyy")
public void setDeliveryDate(Date deliveryDate) {
    this.deliveryDate = deliveryDate;
}
好,
deliveryDate
的值为
2018年3月1日UTC

当我这样做的时候:

@JsonFormat(pattern = "dd-MMM-yyyy", timezone="Asia/Singapore")
public void setDeliveryDate(Date deliveryDate) {
    this.deliveryDate = deliveryDate;
}
它仍然反序列化为
2018年3月1日UTC
,我认为应该是
2018年3月1日SGT


为什么会出现这种情况?

时区
参数用于根据进行序列化,而不是像您的帖子中那样进行反序列化。鉴于“旨在反映协调世界时(UTC)”且不包含时区信息,我不知道如何将其用于反序列化

如果要为
deliveryDate
指定时区,请考虑切换到Java 8之后提供的

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

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

2018年3月6日星期二21:15:12 SRET

试着阅读