- 描述:
- BeanUtils工具是一种方便我们对JavaBean进行操作的工具。
maven依赖
<dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version></dependency>
常用api
// 把orig对象copy到dest对象中.public void copyProperties (Object dest, Object orig)// 把Bean的属性值放入到一个Map里面public Map describe(Object bean)// 把map里面的值放入bean中public void populate (Object bean, Map map)// 设置Bean对象中名称为name的属性值赋值为value. public void setProperty(Object bean,String name, Object value)// 取得bean对象中名为name的属性的值public String getProperty(Object bean, String name) //【常见使用场景】同类之间不同对象要求进行数据复制User user1 = new User();user1.setName("张三");User user2 = new User();// 把user1复制给user2BeanUtils. copyProperties(user2,user1);不同类不同对象之间的数据复制UserForm userForm = new UserForm ();User user = new User();// 把userForm 复制给user BeanUtils. copyProperties(user, userForm);对象数据和Map之间互相转化User user = new User();// 将对象转换为MapMap userMap = BeanUtils.describe(user);Map userMap = new HashMap();User user = new User();// 将Map转换为对象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;
}