您的位置:首页 > 其它

解决BeanUtils传入date数据类型参数的异常问题

2016-06-19 23:04 561 查看
使用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());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息