我正在尝试使用ObjectMapper将文件中存在的JSON转换为Java对象。
JSON文件:sample-date-str.json
{
"eventDate"="2017-06-27 10:04:26.573503+05:30"
}
Java POJO:SampleDatePOJO
class SampleDatePOJO{
private Date eventDate;
getter and setter....
toString...
}
将JSON转换为Java对象的Java代码:
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSX")); //this will convert Date to IST format which is okay.
SampleDatePOJO sampleDatePOJO = mapper.readValue(new File("sample-date-str.json"), SampleDatePOJO.class);
System.out.println(sampleDatePOJO.getEventDate()); //this gives output "Tue
Jun 27 10:43:59 IST 2017"
注意:如果我删除mapper.setDateFormat(..)并使用@JsonFormat(pattern =" yyyy-MM-dd HH:mm:ss.SSSSSSX",timezone =" IST&# 34;)on' eventDate'它提供相同的输出。
自定义Deserilaizer的Java代码
public class CustomDateDeserializer extends JsonDeserializer<Date>{
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSXXX");
Date dateTmp = null;
try {
dateTmp = sdf.parse(p.getValueAsString());
} catch (ParseException e) {
e.printStackTrace();
}
return dateTmp;
}
}
如果我使用上面的@JsonDeserialize注释注释&#39; eventDate&#39;字段为:
@JsonDeserialize(using=CustomDateDeserializer.class)
收到的输出是:
System.out.println(sampleDatePOJO.getEventDate()); //"Tue Jun 27 10:13:59 IST 2017"
这是正确的毫秒&#34; 573503&#34;部分被添加到日期。
我需要理解为什么我的ObjectMapper setDateFormat和@JsonFormat不起作用。或者,如果它们正常工作,为什么输出与SimpeDateFormat格式相同。 非常感谢任何帮助。
答案 0 :(得分:2)
您是否注意到,在前两次转换中,您在日期模式中使用单X
(yyyy-MM-dd HH:mm:ss.SSSSSSX)
。
但在自定义脱胶剂中,您使用的是XXX
(yyyy-MM-dd HH:mm:ss.SSSSSSXXX)
。
这种模式差异实际上造成了所有差异(相差30分钟)。如果你在不同的机制中使用相同的模式,那么输出也将保持不变。