1. 程式人生 > 實用技巧 >org.apache.commons.beanutils.ConversionException: No value specified

org.apache.commons.beanutils.ConversionException: No value specified

背景

框架底層用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);