1.导入相应的jar包,commons-beanutils-1.8.2.jar,需要一个依赖包commons-logging-1.1.1.jar;
2.新建一个User类;
package itat.zttc.model;
import java.util.Date;
public class User {
private int id;
private String username;
private int age;
private String password;
private Date born;
private Point point;
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBorn() {
return born;
}
public void setBorn(Date born) {
this.born = born;
}
}
3.新建一个测试类;
@Test
public void test01() {
try {
User u = new User();
String value = "张三";
String key = "username";
BeanUtils.copyProperty(u, key, value);
BeanUtils.copyProperty(u, "age", 1);
BeanUtils.copyProperty(u, "ddd", value);
//此时无法拷贝日期,因为BeanUtils根本不知道如何来转换日期1988/2/2
//这个时候就需要自己定义相应的转换器来完成转换
/*
* 定义转换器的步骤
* 1、创建一个类让其实现Converter接口
* 2、覆盖这个接口中的convert方法,在这个方法中实现转换
* 3、在拷贝属性之前注册转换器
*/
ConvertUtils.register(new DateConverter(), Date.class);
ConvertUtils.register(new PointConverter(), Point.class);
BeanUtils.copyProperty(u, "born","1977-12-22");
BeanUtils.copyProperty(u, "point","12,33");
System.out.println(u.getBorn());
System.out.println(u.getPoint().getX());
User u2 = new User();
BeanUtils.copyProperties(u2, u);
// System.out.println(u2.getUsername()+u2.getAge());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
4.创建转换器;
package itat.zttc.model;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class DateConverter implements Converter {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* 该方法中的两个参数,第一个参数表示要转换的类型,如果要拷贝一个字符串到日期中,此时这个类型
* 就是日期类型,第二个参数表示要转换的值
* 该方法的返回值就是转换之后的值
*/
@Override
public Object convert(Class clz, Object value) {
//1、判断要转换的类型是否符合要求
if(clz!=Date.class) {
return null;
}
try {
if(value instanceof String) {
return sdf.parse((String)value);
}
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}