【问题标题】:Jackson ObjectMapper deserialize OffsetDateTime - non springJackson ObjectMapper 反序列化 OffsetDateTime - 非弹簧
【发布时间】:2016-10-27 08:41:43
【问题描述】:

我如何反序列化以下格式的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 依赖项,并且还将 JavaTimeModule 注册到了 objectMapper。它不起作用,因为在尝试反序列化时,JSR Jackson jar 的 InstantDeseralizer 期望浮点数、字符串、嵌入式对象或浮点数作为值(抛出异常)而不是起始对象作为令牌。

【问题讨论】:

    标签: json datetime java-8 jackson


    【解决方案1】:

    您处理此问题的方式不正确。使用 java time 模块的目的是解析 ISO 标准的 json 字符串。

    你得到的字符串是你不使用java时间模块时得到的json,本质上是对所有成员字段和getter进行字符串化。

    由于所有的 java 时间类都是不可变的,因此 jackson 不会被脱轨。

    所以要继续使用非标准 json,您甚至不需要 java 时间模块。 您可能需要编写一个自定义解轨器并从 json 字段重新创建 LocalDate、LocalTime 和 ZoneOffset,并使用静态 OffsetDateTime.of(LocalDate, LocalTime, ZoneOffset) 来创建 OffsetDateTime。

    【讨论】:

    • 我神奇地期待模块为我做事,或者假设杰克逊是所有人的母亲,有一个内置的机制,我失踪了。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 2016-12-24
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多