问题描述
利用org.apache.commons.beanutils
工具进行属性拷贝,例如有如下场景
user
对象和formBean
对象都有属性birthday
,而且都是java.sql.Date
类型的。
当利用BeanUtils.copyProperties(user,formBean)
复制属性时候,formBean
中属性birthday为null,那么就会出现如下异常
解决方法
在BeanUtils.copyProperties(user,formBean);
前加上一行代码:
BeanUtilsBean.getInstance().getConvertUtils().register(new SqlDateConverter(null),java.sql.Date.class);
也就是注册一个SqlDateConverter转换器,defaultValue=null,这样就可以接受null值。
原因分析
从源码的copyProperty
方法可以看出,只有找到注册过的转化器,才使用转化器进行对值的转化,否则直接copy value。而deregister中并没有对java.util.Date注册相应的转化器,所以可以通过注册相对应的转化器来解决,或者把java.sql.Date
改为java.util.Date
也可以解决问题。