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

dzjeubhm  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(179)

我有一个JavaSpringRESTAPI,它在POST请求的主体中接收JSON字符串。它包含多个嵌套对象。
在收到POST请求时,我将字符串转换为DTO对象。

问题

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

"startDate": 1622746800000

我尝试过使用JacksonGson对字符串进行反序列化,但它们都无法正确解析startDate
使用Gson时引发异常:
java.text.ParseException:无法分析的日期:“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是类似的,但在我的情况下没有帮助。
下图显示了startDate的格式,如Intellij IDEA的表达式计算器中所示:

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

ibps3vxo

ibps3vxo1#

据我所知,Gson在默认情况下不能反序列化纪元时间,但Jackson可以。
对于Jackson,您可以执行以下操作,

ObjectMapper mapper = new ObjectMapper();
MyDTOClass evData = mapper.readValue(evDataJsonStr, MyDTOClass.class);
  • 请注意,它的ObjectMapper的readValue方法不是convertValue方法 *

相关问题