Lombok引起的com.alibaba.com.caucho.hessian.io.HessianProtocolException: could not be instantiated

项目A用的lombok版本是1.16.10,项目B用的是1.18.0

项目B调用A时,传过去的对象一直是null,最后发现项目A的对象参数竟然没有无参构造方法,lombok<1.16.10>版本的@Data注解默认是给了全参的构造方法,而用了lombok<1.18.0>的项目B的@Data注解默认是无参的构造方法。

项目A:
image.png

项目B:
image.png

最后无奈的我只得给项目A的对象加了@NoArgsConstructor,@AllArgsConstructor(在不影响原来功能的基础上扩展了无参构造方法)
问题顺利解决

dubbo默认是采用Hessian(比jdk自带反序列化高效)进行反序列化的,该反序列化创建对象时,会取参数最少的构造方法来创建对象,构造方法参数设置默认值,基本类型设置为相应基本类型的默认值,不是基本类型设置为null(就是这点,导致上面的构造方法出现空指针,进而导致该对象无法实例化)

参考:https://blog.csdn.net/zipo/article/details/82959012

# Dubbo  Lombok 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×