当BeanUtils的拷贝遇上java.util.Date
BeanUtils是apache基金会下的一个开源项目,主要用于对Java Bean的操作。在一个项目中,经常要用到Bean属性拷贝,使用了org.apache.commons.beanutils.BeanUtils.copyProperties(dest, orgi)。由于此方法声明了抛出异常,在项目中为了方便,便对此作了简单封装,把异常处理了:
public static void copy(Object dest, Object orgi) {
try {
BeanUtils.copyProperties(dest, orgi);
} catch (Exception e) {
log.error("Bean属性拷贝出错。", e);
}
}
后来却发现,当源对象orgi中某个java.util.Date类型的属性为null时,copy会失败(虽然异常被处理了),目标对象dest中部分非Date类型的属性也为空,虽然源对象中这些属性是有值。原因就是上BeanUtils在处理属性值为null的Date类型时出错了,便抛出了异常,后面的属性便不会再复制。
后来在JavaEye搜到了答案:为BeanUtils注册一个日期类型转换器:使用org.apache.commons.beanutils.ConvertUtils,注册org.apache.commons.beanutils.converters.DateConverter。下面的代码是放在copy方法所在的类:
static{
ConvertUtils.register(new DateConverter(), Date.class);
}