java - 反序列化为 JodaTime 时,Jackson 丢失了与日期的时间偏移

标签 java json jackson jodatime

我正在尝试使用 Jackson 序列化然后反序列化一个 Joda DateTime 对象,但它没有完全反序列化该对象。看起来时区信息丢失了。

这段代码:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS , false);

DateTime dt = DateTime.now();
String j = mapper.writeValueAsString(dt);
DateTime dt2 = mapper.readValue(j, DateTime.class);

System.out.println("json: " + j);
System.out.println("eq? " + (dt.equals(dt2)));
System.out.println("dates:\n" + dt + "\n" + dt2);

输出这个:

json: "2013-10-18T14:10:52.458-07:00"
eq? false
dates:
2013-10-18T14:10:52.458-07:00
2013-10-18T21:10:52.458Z

这是设计使然吗?除了编写自己的序列化器/反序列化器之外,我还能在这里做些什么吗? 我在 SO 上看到了一些关于此的问题,但没有一个是专门针对这方面的。

我正在使用 Joda 2.1 和 Jackson 2.1

最佳答案

必须通过以下方式告诉 jackson 不要将时区调整为本地情况:

mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);

See this issue on GitHub

关于java - 反序列化为 JodaTime 时,Jackson 丢失了与日期的时间偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460004/

相关文章:

java - 了解 urlclassloader,如何访问已加载的 jar 的类

java - 发现名称 : getText 存在冲突的 getter

javascript - $.ajax 错误未捕获 SyntaxError : Unexpected token :

java - 当功能 "http://apache.org/xml/features/disallow-doctype-decl"设置为 true 时,不允许获取 DOCTYPE

java - 使用 Java 8 在 Drools 6.2 中禁用 JIT

java - JSON 文本到 Java 的转换问题与随机数生成

php - json对象与ajax返回数组的用法

jackson - HornetQ - 如何发送和转换 POJO

java - 设计 JSON api 时的内部对象表示

java - Jackson:将对象字段序列化为数组