在一次項目中,由於沒有留意到這兩個包的不同,導致使用類的copyProperties()方法時,出現了Null key for a Map not allowed in JSON的錯誤,查看源碼發現這兩個方法的參數是對換過來了。
1:springframework.beans中的copyProperties的參數是(源頭,目標)
2:commons.beanutils中的copyProperties的參數是(目標,源頭),注意用這個方法時會有兩個Exceptions:IllegalAccessException, InvocationTargetException,用這個方法時需要處理這兩個異常。
查了下有篇博文是將這兩者區別的,下面是鏈接地址:
https://www.cnblogs.com/dongfangshenhua/p/7099970.html
引用如下:
1)兩者的copyProperties方法參數位置不同
org.springframework.beans.BeanUtils: copyProperties(sourceDemo, targetDemo)
org.apache.commons.beanutils.BeanUtils: copyProperties(targetDemo, sourceDemo)
2)要求兩個Bean的屬性名相同,且有對應的setXxx方法和getXxx方法。其實底層原理是使用sourceDemo的getXxx方法和targetDemo的setXxx方法
3)sourceDemo有的屬性而targetDemo沒有的屬性,不會封裝到targetDemo對象中;
targetDemo有的屬性而sourceDemo沒有的屬性,會封裝到targetDemo中,數據為默認值(注意基本類型默認值與引用類型默認值不同)
4)類型轉換問題
a)基本類型與其對應的封裝類型可以相互轉換
b)org.springframework.beans.BeanUtils與org.apache.commons.beanutils.BeanUtils對於String和Date類型轉換的情況是不同的,具體看以下案例