BeanUtils.copyProperties復制對象結果為空的原因分析
更新時間:2022年06月15日 10:09:33 作者:小迪迦h
這篇文章主要介紹了BeanUtils.copyProperties復制對象結果為空的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
BeanUtils.copyProperties復制對象結果為空原因
細心比對,發(fā)現原來是導錯了包導致的
正確的包
import org.springframework.beans.BeanUtils;
錯誤的包
import org.apache.commons.beanutils.BeanUtils;
兩個類的區(qū)別
- 兩者的copyProperties方法參數位置不同org.springframework.beans.BeanUtils: copyProperties(sourceDemo, targetDemo)
- org.apache.commons.beanutils.BeanUtils: copyProperties(targetDemo, sourceDemo)
- 要求兩個Bean的屬性名相同,且有對應的setXxx方法和getXxx方法。其實底層原理是使用sourceDemo的getXxx方法和targetDemo的setXxx方法
- sourceDemo有的屬性而targetDemo沒有的屬性,不會封裝到targetDemo對象中;targetDemo有的屬性而sourceDemo沒有的屬性,會封裝到targetDemo中,數據為默認值(注意基本類型默認值與引用類型默認值不同)
- 類型轉換問題:基本類型與其對應的封裝類型可以相互轉換。org.springframework.beans.BeanUtils與org.apache.commons.beanutils.BeanUtils對于String和Date類型轉換的情況是不同的
總結:發(fā)現其實只需要將兩個對象換個位置就好了。。。
BeanUtils.copyProperties拷貝沒成功的坑,記錄解決原因
在使用BeanUtils時,會先引用對應的包,但是如果包引用不對的話,那么使用BeanUtils.copyProperties(Object value1, Object value2)進行數據拷貝,可能是value1拷貝到value2上;也有可能是value2拷貝到value1上。
具體如下
包org.apache.commons.beanutils.BeanUtils, 則結果是:
- value2拷貝到value1上,即value2的值會覆蓋到value1上;
包org.springframework.beans.BeanUtils, 則結果是:
- value1拷貝到value2上,即value1的值會覆蓋到value2上。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

