【问题标题】:How can I deserialize java.time.LocalDate in Spring HATEOAS?如何在 Spring HATEOAS 中反序列化 java.time.LocalDate?
【发布时间】:2016-08-06 04:33:27
【问题描述】:

我正在构建一个 Spring HATEOAS 应用程序。当我发布包含 ISO8601 日期的 JSON 文档时,我得到:

无法读取 HTTP 消息:org.springframework.http.converter.HttpMessageNotReadableException:无法读取文档:无法解析文本“2016-05-13T21:00:00.000Z”,在索引 10 处找到未解析的文本(通过参考链:com.my.package.web.resources.MyResource["startDate"]);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: Text '2016-05-13T21:00:00.000Z' could not be parsed, unparsed text found at index 10 (through reference chain: com.my.package.web. resources.MyResource["startDate"])

按照here 的建议,我的类路径中有 jackson-datatype-jsr310。我还尝试使用默认和自定义反序列化器在适当的字段上明确声明@JsonDeserialize/@JsonSerialize。有什么想法吗?

【问题讨论】:

  • 您是否尝试为 Spring 提供一个 ObjectMapper 并注册了 JavaTimeModule?我认为这应该与您正确放置的 @JsonDeserialize/@JsonSerialize 注释做同样的事情,但它会在全局范围内应用它,并且可能会帮助 Spring 以某种方式处理这个问题(尽管如果这样做我会感到惊讶 - 它应该在功能上等同于那些注释)
  • @pedorro 我尝试注册一个 ObjectMapper 并设置 m.deserializerByType(LocalDate.class, LocalDateDeserializer.INSTANCE) 没有运气。
  • mapper.registerModule(new JavaTimeModule()); 应该如何隐式处理所有 jsr310 类型。
  • 2016-05-13T21:00:00.000Z 不是本地日期,是吗?
  • 不,它是一个字符串。我认为LocalDateDeserializer 考虑到了这种格式。我弄错了吗?我还写了一个自定义的反序列化器,它从 long 转换,但似乎根本没有使用。

标签: spring jackson spring-hateoas jsr310


【解决方案1】:

找到了解决方案。原来我的 jackson-dataype-jsr310 有点旧(2.6.4)并且日期中的“Z”造成了问题。使用最新版本的 lib (2.7.3) 可以解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2016-10-15
    • 2019-11-13
    • 2017-10-27
    • 2016-08-06
    • 1970-01-01
    • 2019-10-16
    • 2015-08-22
    相关资源
    最近更新 更多