当BeanUtils的拷贝遇上java.util.Date

分类:Tech | 作者:Shoopman | 发表于2009/08/16 没有评论  

BeanUtilsapache基金会下的一个开源项目,主要用于对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);
}

Tag: