【问题标题】:InvalidFormatException for ISO 8601, JsonFormat, TimeZone, and +0000 at the endISO 8601、JsonFormat、TimeZone 和 +0000 的 InvalidFormatException
【发布时间】:2019-09-26 08:24:38
【问题描述】:

情况

我有一个 java 应用程序通过 feign 调用微服务,我得到以下异常:

原因:com.fasterxml.jackson.databind.exc.InvalidFormatException: 无法从 String 反序列化 java.util.Date 类型的值 “2019-05-08T14:41:39.803+0000”:预期格式 "yyyy-MM-dd'T'HH:mm:ss.XXX"

我已经指出,我们从服务器获得的这种格式是 ISO8601,来自位于以下位置的测试:

https://github.com/FasterXML/jackson-databind/blob/master/src/test/java/com/fasterxml/jackson/databind/deser/jdk/DateDeserializationTest.java#L157

我正在尝试以下 @JsonFormat 注释,但它们失败了:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.XXX", lenient = OptBoolean.TRUE) private Date creationDate;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.XXX", lenient = OptBoolean.TRUE) private Date  lastUpdatedDate;

问题

所以...为这个非常简单的问题道歉,但是:

如何处理末尾的 +0000 以使反序列化最终起作用?

【问题讨论】:

  • 添加注释如何失败的信息
  • @Leszek Gruchała 无法从字符串“2019-05-08T14:41:39.803+0000”反序列化 java.util.Date 类型的值:预期格式“yyyy-MM-dd'T'HH: mm:ss.XXX"
  • 试试yyyy-MM-dd'T'HH:mm:ssZyyyy-MM-dd'T'HH:mm:ss.SSSZ

标签: java spring jackson


【解决方案1】:

我如何处理最后的+0000 以使反序列化最终起作用?

@JsonFormat 需要 SimpleDateFormat 兼容的模式定义。

因此,ZX 可用于指示 GMT 偏移值,具体取决于偏移格式。

您正在寻找的完整模式是yyyy-MM-dd'T'HH:mm:ss.SSSZyyyy-MM-dd'T'HH:mm:ss.SSSX,如SimpleDateFormat 文档的示例所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2016-06-21
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2016-04-16
    相关资源
    最近更新 更多