Jackson ObjectMapper反序列化OffsetDateTime - 非spring

时间:2016-10-27 08:41:43

标签: json datetime java-8 jackson

如何以下列格式反序列化json对象(OffsetDateTime),

{
  "hour": 3,
  "nano": 641000000,
  "year": 2016,
  "month": "OCTOBER",
  "minute": 6,
  "offset": {
    "id": "Z",
    "rules": {
      "fixedOffset": true,
      "transitions": [

      ],
      "transitionRules": [

      ]
    },
    "totalSeconds": 0
  },
  "second": 13,
  "dayOfWeek": "THURSDAY",
  "dayOfYear": 301,
  "dayOfMonth": 27,
  "monthValue": 10
}
使用jackson

到Java OffsetDateTime。

我已经包含了JSR jackson依赖项,并且还在objectMapper中注册了JavaTimeModule。它不起作用,因为在尝试反序列化时,JSR Jackson jar的InstantDeseralizer期望将float,String,embedded对象或float作为值(抛出异常)而不是作为标记的起始对象。

1 个答案:

答案 0 :(得分:1)

你接近这个的方式是不对的。使用java时间模块的要点是解析作为ISO标准的json字符串。

你拥有的字符串是你不使用java时间模块时得到的json,它主要用于对所有成员字段和getter进行字符串化。

由于所有的java时间类都是不可变的,所以jackson不会被取消选择。

因此,为了继续使用非标准的json,你甚至不需要一个java时间模块。 您可能必须编写自定义deserailizer并从json字段重新创建LocalDate,LocalTime和ZoneOffset,并使用静态OffsetDateTime.of(LocalDate,LocalTime,ZoneOffset)来创建OffsetDateTime。