背景
框架底層用BeanUtils.copyProperty工具封裝對象
BeanUtils.copyProperty(obj, fieldName, objval);
之前用String一直沒問題,后來字段多用IDEA的根據表自動生成對象的功能,生成內容如下。
問題
生成的POJO中,數據庫DATE類型對應實體中java.sql.Date類型,DATETIME對應實體中java.sql.Timestamp類型。
只要POJO的字段為 java.sql.Date時間等非內置對象時,如果對象為null則會出現org.apache.commons.beanutils.ConversionException: No value specified異常。
解決方案
1.字段類型改為String
2.注冊轉換器
在調用BeanUtils.copyProperty()前注冊轉換器,注冊后sql.date/sql.Timestamp字段類型即可允許為空。
// 注冊sql.date/sql.Timestamp的轉換器,即允許BeanUtils.copyProperty時的源目標的sql類型的值允許為空
ConvertUtils.register(new org.apache.commons.beanutils.converters.SqlDateConverter(null), java.sql.Date.class);
ConvertUtils.register(new org.apache.commons.beanutils.converters.SqlTimestampConverter(null), java.sql.Timestamp.class);
BeanUtils.copyProperty(obj, fieldName, objval);