【问题标题】:Jackson JSON not serializing Joda DateTime correctlyJackson JSON 未正确序列化 Joda DateTime
【发布时间】:2011-08-07 08:54:26
【问题描述】:

我在 Order 类中有一个 Joda DateTime:

public class Order {
    private DateTime creationTime;
    ...
}

我已按如下方式初始化我的映射器:

mapper.configure(
        SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);

当我序列化这个类时,我希望看到以 ISO-8601 格式序列化的 creationTime,如下所示

{
  "creationTime" : "2011-01-01T09:00:00.000-04:00"
}

这在我的单元测试中运行良好。但是,在我的 Web 应用程序中,完全相同的代码正在序列化所有 DateTime 字段:

{
  "creationTime" : {
    "year" : 2011,
    "dayOfMonth" : 17,
    "dayOfWeek" : 7,
    "era" : 1,
    "dayOfYear" : 107,
    "weekOfWeekyear" : 15,
    "weekyear" : 2011,
    "monthOfYear" : 4,
    "yearOfEra" : 2011,
    "yearOfCentury" : 11,
    "centuryOfEra" : 20,
    "millisOfSecond" : 590,
    "millisOfDay" : 40311590,
    "secondOfMinute" : 51,
    "secondOfDay" : 40311,
    "minuteOfHour" : 11,
    "minuteOfDay" : 671,
    "hourOfDay" : 11,
    "millis" : 1303053111590,
    "zone" : {
      "fixed" : false,
      "uncachedZone" : {
        "cachable" : true,
        "fixed" : false,
        "id" : "America/New_York"
      },
      "id" : "America/New_York"
    },
    "chronology" : {
      "zone" : {
        "fixed" : false,
        "uncachedZone" : {
          "cachable" : true,
          "fixed" : false,
          "id" : "America/New_York"
        },
        "id" : "America/New_York"
      }
    }
}

我错过了什么?在这两种情况下,我的类路径中都包含了 jackson-core-asl-1.7.6.jar 和 jackson-mapper-asl-1.7.6.jar。

在一些在线示例中,我看到了关于 DateTime 的注释。我不知道这是否需要,但我试过了。见下文:

public class Order {
    @JsonSerialize(using=DateTimeSerializer.class)
    private DateTime creationTime;
    ...
}

这似乎没什么区别。

谢谢。

附:有谁知道杰克逊邮件列表是否有效?我在用户邮件列表上发布了这个问题,但它没有显示在档案中。档案中的最后一篇文章日期为 2010 年 6 月 24 日。

【问题讨论】:

  • 邮件列表正在运行,但由于某种原因 Codehaus 档案不起作用。
  • 谢谢。我从邮件列表中得到了很多回复和帮助。
  • 那么,解决办法是什么?
  • 就我而言,这是解决方案stackoverflow.com/a/16379212/1266040

标签: java json jodatime jackson


【解决方案1】:

这似乎对我有用: How to serialize Joda DateTime with Jackson JSON processer?

基本上,这个想法是创建一个扩展 org.codehaus.jackson.map.JsonSerializer 的类,并使用覆盖的序列化方法:

public void serialize(DateTime value, JsonGenerator gen, SerializerProvider arg2) throws IOException, JsonProcessingException {
    gen.writeString(formatter.print(value));
}

然后只需使用该自定义序列化程序代替 DateTimeSerializer

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-06-20
  • 2011-03-17
  • 2013-09-25
  • 2018-03-14
  • 1970-01-01
  • 2012-06-11
  • 2014-11-13
  • 2016-07-24
相关资源
最近更新 更多