写点什么

jackson 对象带时间的转换报错

作者:进哥
  • 2024-03-22
    广东
  • 本文字数:1040 字

    阅读完需:约 3 分钟

jackson对象带时间的转换报错

今天下午调试的时候,做对象类型转换时,存在时间字段带 T 带 Z 的 UTC 时间,转换失败。

报错如下:

 jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDateTime


报错原因:将 JSON 字符串反序列化为java.time.LocalDateTime或其他 Java 8 时间日期类(如 LocalDate、LocalTime 等)时,Jackson 默认并不知道如何处理这些类。


报错代码是这样写的:

OffsetPageQuery<CssPlatformCustomersClaimsExportRequest> queryParam = new OffsetPageQuery<>();ExportInitParam<CssPlatformCustomersClaimsExportRequest> initParam = objectMapper.readValue(param.getInitParam(), new com.fasterxml.jackson.core.type.TypeReference<ExportInitParam<CssPlatformCustomersClaimsExportRequest>>() {            });
复制代码


需要转换的参数

{  "businessType": 8,  "queryParams": "{\"customerCodeList\":[],\"numberType\":\"fineBillIdList\",\"number\":\"\",\"timeType\":\"CREATE_TIME\",\"timeScopeList\":[\"2024-02-25T16:00:00Z\",\"2024-03-11T15:59:59Z\"],\"businessType\":\"YT\",\"fineBillIdList\":[],\"exportList\":[\"fineBillId\",\"waybillNo\",\"customerCode\",\"areaName\",\"departmentName\",\"reviewStateName\",\"compensationAmount\",\"compensationCode\",\"productName\",\"compenstateName\",\"compensationReason\",\"compensationRemark\",\"processName\",\"destinationCountryName\",\"extractStatusName\",\"remark\",\"insureStatusName\",\"businessType\",\"createByName\",\"finalReviewByName\"]}"}
复制代码


jackson 有问题,后面改成用 fastjson 转换就没问题啦!

  OffsetPageQuery<CssPlatformCustomersClaimsExportRequest> queryParam = new OffsetPageQuery<>(); ExportInitParam<CssPlatformCustomersClaimsExportRequest> initParam = JsonUtils.toBeanType(param.getInitParam(), new TypeReference<ExportInitParam<CssPlatformCustomersClaimsExportRequest>>() {});
// JsonUtils 工具类public static <T>T toBeanType(String text,TypeReference<T> typeReference){ return JSON.parseObject(text, (Type) typeReference.getType()); }
复制代码

在这段代码中,jsonToObjectWithAnonymousInnerClass方法通过调用typeReference.getType()获取了实际的Class对象,从而实现了对带有泛型的目标类型的反序列化。不过这种方式仍然需要用户显式提供具体的泛型类型信息。

发布于: 31 分钟前阅读数: 8
用户头像

进哥

关注

开发人,bug作造者,修代码与自由。 2019-02-17 加入

写代码踩过的坑,那是真的坑,为了避坑,我决定记录下来。大家小心,别进坑了。

评论

发布
暂无评论
jackson对象带时间的转换报错_java‘_进哥_InfoQ写作社区