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

4 篇文章 0 订阅
3 篇文章 0 订阅

使用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());

    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值