记一次因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的类型转换是不适用的