无法使用 Jackson 和 Gson 解析日期值

Unable to parse date value using Jackson and Gson

我有一个 Java Spring REST API 在 POST 请求的主体中接收 JSON 字符串。 JSON 字符串很大;它包含多个嵌套对象。

收到 POST 请求后,我将字符串转换为 DTO 对象。

问题

其中一个嵌套对象包含未正确反序列化的键 startDate

startDate 对象的值为:

"startDate": 1622746800000

我尝试使用 JacksonGson 反序列化字符串,但它们都无法正确解析 startDate

使用 Gson 时抛出异常:

java.text.ParseException: Unparseable date: "1622746800000"

如果我将 startDate 作为 null 传递,一切正常 - 字符串被正确转换为 DTO 对象。

问题

知道这个问题的可能原因是什么吗?我该如何解决?


P.S. startDate 的值作为来自后端的响应的一部分被接收。我将相同的响应字符串发送到 POST 请求正文中的后端。


代码:

以下是解析请求正文中收到的字符串的代码:

ObjectMapper mapper = new ObjectMapper();
MyDTOClass evData = mapper.convertValue(evDataJsonStr, MyDTOClass.class);

我也试过 Gson:

Gson mapper = new Gson();
MyDTOClass evData = mapper.fromJson(evDataJsonStr, MyDTOClass.class);

这个 question 类似,但对我的情况没有帮助。

下图显示了 Intellij IDEA 表达式计算器中 startDate 的格式:

序列化时的以上值变为:1622746800000,这就是我要反序列化的内容。

据我了解,Gson 默认情况下无法反序列化纪元时间。但是 Jackson 可以。

对于 Jackson,您可以执行以下操作,

ObjectMapper mapper = new ObjectMapper();
MyDTOClass evData = mapper.readValue(evDataJsonStr, MyDTOClass.class);

请注意它的ObjectMapper的readValue方法不是convertValue方法