记一次因lombok升级引起的反序列化失败的bug

记一次因lombok升级引起的反序列化失败的bug

问题出现:

更新项目后,发现原来正常的接口报错,调试发现了报错信息为 json反序列化异常

no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)

字符串转换对象Area 失败,该对象上添加了lombok @Builder @Data 注解,使用的转换方式是 areaProvinceVOS = ObjectMapperFactory.getObjectMapper().readValue(json, valueTypeRef);

问题解决

通过报错信息发现类上缺少构造函数,于是在Area及其包含的子类上添加注解 @AllArgsConstructor @NoArgsConstructor ,序列化正常

原因解析

更新项目过程中,该接口内的代码没有更改过,但是更新了lombok版本,从1.16.22更新到了1.18.8。猜测是1.18 的@Builder 注解没有无参构造函数,导致反序列化失败

由于lombok是编译期起效的,于是查看一下编译后的字节码文件,果然是没有无参构造函数的。有一个全参构造器,但是对于jackson的类型转换是不适用的

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值