AOS应用基础平台 - 解决AOSUtils.apply时日期、数值类型报错的问题

问题产生原因

apply使用了commons-beanutils-1.7.0.jar包中BeanUtils.copyProperties方法,实现对象属性复性功能,但在转换日期时,不能识别格式,在转换BigDecimal时,如果源对象中该属性的值为null也会报错

解决办法:

1、实现Date转换器

/**
* 日期转换
*
*/
public class DateConvert implements Converter {

   @SuppressWarnings("rawtypes")
   public Object convert(Class arg0, Object arg1) {
	   Date d = null;
	   try{
		   d = (Date)arg1;
		   if (d!=null){
			   return d;
		   }
	   }catch(Exception ex){
		   
	   }
	   
       String p = (String) arg1;
       if (p == null || p.trim().length() == 0) {
           return null;
       }
       try {
           SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           return df.parse(p.trim());
       } catch (Exception e) {
           try {
               SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
               return df.parse(p.trim());
           } catch (ParseException ex) {
        	   try {
                   SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
                   return df.parse(p.trim());				
        	   } catch (Exception e2) {
				   return null;
        	   }
           }
       }
   }

}

2、继承BeanUtils、注册转换器

public class BeanUtilsExtends extends BeanUtils {
   static {
       ConvertUtils.register(new DateConvert(), java.util.Date.class);
       ConvertUtils.register(new DateConvert(), java.sql.Date.class);
       //注册BigDecimal时,将null作为默认值
       ConvertUtils.register(new BigDecimalConverter(null), java.math.BigDecimal.class);
   }

   public static void copyProperties(Object dest, Object orig) {      
		   AOSUtils.apply(dest, orig);       
   }
}

3、然后使用BeanUtilsExtends.copyProperties代替AOSUtils.apply即可

你可能感兴趣的:(AOS应用基础平台 - 解决AOSUtils.apply时日期、数值类型报错的问题)