Lombok注解下使用springboot的BeanUtils.copyProperties无效

问题现象:

今天在项目中使用到 

BeanUtils.copyProperties(userInfo, bladeUserVo);

复制 userInfo对象 的所有属性值,到 bladeUserVo对象 的同名属性。但是失败了。


问题分析:

通过查看代码可知:

是因为原对象的实体类中使用了lombok插件@Getter@Setter注解。

BeanUtils.copyProperties(A, B); 是先找A对象中的getter和setter方法,再去找B对象中的getter和setter方法,通过属性名来匹配对应的方法,从而实现属性值复制,

然而在只用了 lombok插件 后,就会导致 A对象中的getter和setter方法处理逻辑发生了改变,与java原有逻辑不同

lombok插件配置了@Accessors(chain = true)注解,该注解可以使被作用对象的setter方法返回值,从原本的 void 改为 属性的类型(如String,int,Integer等)。


解决方法:

1.不使用lombok插件

其实lombok插件虽然使得代码看起来方便,但打包后反而更大了,因为getter/setter方法的逻辑没有太大改变,但却多了一个插件依赖包。

还不如自己手动定义getter/setter方法,也能避免一些方法的兼容问题(如 BeanUtils.copyProperties(A, B)),其实IDEA老司机都知道有快捷键 (Alt+Insert) 可以直接生成实体类的 getter/setter/toString/构造器等 方法,完全不会比lombok费时。

 

2.把A对象中需要用到的属性,调用它的getter方法,一个一个的用B对象对应的setter方法,赋值到B对象的同名属性上。

 

3.修改逻辑,具体操作原理和示例可以查看这位大佬的链接(转载):

https://www.jianshu.com/p/357b55852efc

猜你喜欢

转载自blog.csdn.net/weixin_42585386/article/details/112790028