• 描述:
    • BeanUtils工具是一种方便我们对JavaBean进行操作的工具。

      maven依赖

  1. <dependency>
  2. <groupId>commons-beanutils</groupId>
  3. <artifactId>commons-beanutils</artifactId>
  4. <version>1.8.3</version>
  5. </dependency>

常用api

  1. // 把orig对象copy到dest对象中.
  2. public void copyProperties (Object dest, Object orig)
  3. // 把Bean的属性值放入到一个Map里面
  4. public Map describe(Object bean)
  5. // 把map里面的值放入bean中
  6. public void populate (Object bean, Map map)
  7. // 设置Bean对象中名称为name的属性值赋值为value.
  8. public void setProperty(Object bean,String name, Object value)
  9. // 取得bean对象中名为name的属性的值
  10. public String getProperty(Object bean, String name)
  11. //【常见使用场景】
  12. 同类之间不同对象要求进行数据复制
  13. User user1 = new User();
  14. user1.setName("张三");
  15. User user2 = new User();
  16. // 把user1复制给user2
  17. BeanUtils. copyProperties(user2,user1);
  18. 不同类不同对象之间的数据复制
  19. UserForm userForm = new UserForm ();
  20. User user = new User();
  21. // 把userForm 复制给user
  22. BeanUtils. copyProperties(user, userForm);
  23. 对象数据和Map之间互相转化
  24. User user = new User();
  25. // 将对象转换为Map
  26. Map userMap = BeanUtils.describe(user);
  27. Map userMap = new HashMap();
  28. User user = new User();
  29. // 将Map转换为对象
  30. BeanUtils.populate(user,userMap);

日期类型的拷贝

/**
 * 扩展BeanUtils.copyProperties支持data类型
 */
public class BeanUtilsEx extends BeanUtils {
    private static Logger logger = Logger.getLogger(BeanUtilsEx.class);

    static {
        ConvertUtils.register(new DateConvert(), java.util.Date.class);
        ConvertUtils.register(new DateConvert(), String.class);
    }

    public static void copyProperties(Object target, Object source) {
        // 支持对日期copy
        try {
            org.apache.commons.beanutils.BeanUtils.copyProperties(target, source);
        } catch (IllegalAccessException | InvocationTargetException e) {
            logger.error("扩展BeanUtils.copyProperties支持data类型:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

扩展BeanUtils.copyProperties支持data类型

/**
 * 扩展BeanUtils.copyProperties支持data类型
 */
public class DateConvert implements Converter {
    @Override
    public Object convert(Class class1, Object value) {
        if (value == null) {
            return null;
        }
        if (value instanceof Date) {
            return value;
        }
        if (value instanceof Long) {
            Long longValue = (Long) value;
            return new Date(longValue.longValue());
        }
        if (value instanceof String) {
            String dateStr = (String) value;
            Date endTime = null;
            try {
                String regexp1 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])T([0-2][0-9]):([0-6][0-9]):([0-6][0-9])";
                String regexp2 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])(/t)([0-2][0-9]):([0-6][0-9]):([0-6][0-9])";
                String regexp3 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])";
                if (dateStr.matches(regexp1)) {
                    dateStr = dateStr.split("T")[0] + " " + dateStr.split("T")[1];
                    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    endTime = sdf.parse(dateStr);
                    return endTime;
                } else if (dateStr.matches(regexp2)) {
                    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    endTime = sdf.parse(dateStr);
                    return endTime;
                } else if (dateStr.matches(regexp3)) {
                    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    endTime = sdf.parse(dateStr);
                    return endTime;
                } else {
                    return dateStr;
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return value;
    }
}
// 约定前提: 请求中的参数名称需要和javabean的属性名称保持一致!!!!
public static <T>T requestToBean(HttpServletRequest request , Class<T> clazz) {
    //创建javaBean对象    
    Object obj=null;
    try {
        obj=clazz.newInstance();
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }

    //得到请求中的每个参数
    Enumeration<String> enu = request.getParameterNames();
    while(enu.hasMoreElements())  {
        //获得参数名
        String name = enu.nextElement();

        //获得参数值
        String value = request.getParameter(name);

        //然后把参数拷贝到javaBean对象中
        try {
            BeanUtils.setProperty(obj, name, value);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    return (T)obj;
}