我使用杰克逊1.9.7并没有不利的影响,我发现,这样做以下并没有解决我的序列化/ des erialization时区的问题:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
objectMapper.setDateFormat(dateFormat);
而不是 “2014-02-13T20:09:09.859Z” 我知道 “2014-02-13T08:09:09.859 + 0000” 的JSON消息是显然是不正确。我没有时间通过Jackson库源代码来弄清楚为什么发生这种情况,但是我发现如果我只是指定Jackson为ObjectMapper.setDateFormat方法提供了ISO8601DateFormat类,那么日期是正确的。
除了这不把毫秒的格式,这是我想要的所以我分类ISO8601DateFormat类和overrode的方法format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) 方法。
/**
* Provides a ISO8601 date format implementation that includes milliseconds
*
*/
public class ISO8601DateFormatWithMillis extends ISO8601DateFormat {
/**
* For serialization
*/
private static final long serialVersionUID = 2672976499021731672L;
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
{
String value = ISO8601Utils.format(date, true);
toAppendTo.append(value);
return toAppendTo;
}
}