【问题标题】:jackson deserializer not getting invoked杰克逊反序列化器没有被调用
【发布时间】:2021-01-26 23:30:23
【问题描述】:

我在 Java 中的日期反序列化时收到以下错误:

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "22-09-2020T05:08:05+0000": not a valid representation (error: Failed to parse Date value '22-09-2020T05:08:05+0000': Cannot parse date "22-09-2020T05:08:05+0000": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSX", "yyyy-MM-dd'T'HH:mm:ss.SSS", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

我输入的日期是这种格式22-09-2020T05:08:05+0000

我正在使用

 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy'T'HH:mm:ssZ")
    OffsetDateTime lastAnalysisDate;

如何解决这个错误?尽管使用了自定义 JsonFormat,但错误消息表明它不是标准数据类型。

我正在使用在线日期格式化程序验证工具 https://javadevtools.com/simpledateformat

并且我指定的格式根据这个评估工具是有效的

【问题讨论】:

标签: java date datetime jackson


【解决方案1】:

问题很可能不在于日期格式,而在于ObjectMapper 的配置,您必须注册JavaTimeModule 以处理来自java.time 包的类:

例子:

public class TestOffsetDate {
    @Getter
    @Setter
    static class D {
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy'T'HH:mm:ssZ")
        private OffsetDateTime lastAnalysisDate;
    }

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule()); // <--- this is required

        String json = "{\"lastAnalysisDate\":\"22-09-2020T05:08:05+0000\"}";
        D d = mapper.readValue(json, D.class);
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(d));
    }
}

示例 JSON 解析成功,打印以下输出:

{
  "lastAnalysisDate" : "22-09-2020T05:08:05+0000"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2017-03-04
    • 2017-01-30
    • 2019-09-02
    • 2020-04-21
    相关资源
    最近更新 更多