前言
调用一个第三方SDK的时候使用该SDK提供的Bean类封装数据调用,在使用BeanUtils.copyProperties的时候发现有些数据没成功的copy过去,使用DeBug进行源码分析,发现有的属性可以顺利获取到write方法.
然后发现所有属性的read方法都是顺利获取到的
分析
思考了一下觉得可能跟write方法有关系,就点开Bean查看了一下,发现无法获取到write方法,结果发现方法在set值的同时也返回实例本身用做链式调用.方法如下:,看到这个方法的时候我当场就是:
.然后自己写了一个类,生成正常的set方法试了一下BeanUtils.copyProperties发现没问题,就有了这篇博客.
故事就是这么简短有力.
总结
Apache的BeanUtils.copyProperties(),需要提供的dest对象能提供返回void的set方法,而不是这种可以链式调用的方法或者其他返回参数的set方法,如果不是返回void的方法将无法被读取到writeMethods中,这样就没办法进行正常的BeanCopy了;总结完毕,如果你也遇到类似的问题,不一定是Apache的BeanUtils工具类,那么你也可以尝试分析一下是不是这个原因.希望能帮到刚好遇到这类问题的朋友.