【发布时间】: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