使用BeanUtils确实简化了我们的代码量,但是我们使用中会发现如果从表单接受的是Date类型的数据的话,会抛出异常。
解决方法有两个,就是注册一个日期转换器:
这是Admin类的代码
public class Admin {
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
1.自定义一个日期转换器,但是挺麻烦的,虽然可以随意定制想要的样子
//表单提交日期类型时的解决方法,自定义日期类型转换器
public void test() throws Exception{
Admin admin=new Admin(); //创建一个对象
String date="1900-1-1"; //模拟从表单接收的日期
// 注册日期类型转换器:1, 自定义的方式
ConvertUtils.register(new Converter() {
// 转换的内部实现方法,需要重写
@Override
public Object convert(Class type, Object value) {
// 判断
if (type != Date.class) {
return null;
}
if (value == null || "".equals(value.toString().trim())) {
return null;
}
try {
// 字符串转换为日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(value.toString());
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
},Date.class);
// 把表单提交的数据,封装到对象中
BeanUtils.copyProperty(admin, "birthday", date); //拷贝日期到对象中
System.out.println(admin.getBirthday());
}
2.使用自带的工具类进行日期转换,挺方便的,建议使用这个比较快速
//使用提供的日期类型装换工具类,更加的简单
@Test
public void test() throws Exception{
Admin admin=new Admin(); //创建admin对象
String name="suny"; //模拟从 表单接收的属性
String birthday="1900-01-01";
// 注册日期类型转换器: 使用组件提供的转换器工具类
ConvertUtils.register((Converter) new DateLocaleConverter(), Date.class);
//拷贝name属性到对象
BeanUtils.copyProperty(admin,"name",name);
//拷贝birthday属性到对象
BeanUtils.copyProperty(admin,"birthday",birthday);
//测试输出获取到的属性
System.out.println(admin.getName());
System.out.println(admin.getBirthday());
}