zoukankan      html  css  js  c++  java
  • BeanUtils String转Date注册器

    主要是用来设置非空对象的属性。

    1 使用BeanUtils进行设置属性时,对于String,int可以自动转换。比如下面的例子

    常用方法

    1)BeanUtils.setProperty    ////复制属性到对象中

    2)BeanUtils.copyProperties   //复制属性到对象中

    3)BeanUtils.populate(bean, properties) //copy map数据到bean对象中

    特点:

    对于设置的 Bean 对象如果没有对应的属性,则BeanUtils会直接忽略,对于设计工具类是有好处的。

    先定义一个Person类

    复制代码
    package pkg6;
    
    import java.util.Date;
    import java.text.SimpleDateFormat;
    
    public class Person {
        private String name;
        private String gender;
        private int age;
        private Date birthday;
        
        public Person() {
            
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        
        @Override
        public String toString() {
            return "{name:"+name+" age:"+age+" birthday:"+birthday+"}";
        }
    
    }
    复制代码

    使用一个函数测试一下

    复制代码
    package pkg6;
    
    import java.lang.reflect.InvocationTargetException;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    public class demo1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Person p1 = new Person();
            String name = "eric";
            String gender = "M";
            int age = 12;
            String birthday = "1991-32-56";
            
            
            try {
                BeanUtils.setProperty(p1, "name", "eric");
                //BeanUtils.setProperty(p1, "birthday", birthday);
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
            System.out.println(p1);
        }
    
    }
    复制代码

    它的输出是

    {name:eric age:0 birthday:null}

    没有问题。在web开发过程中经常会遇到网页提交的用户数据是字符串,存到数据库中的数据是日期,那么直接进行设置会出现什么情况,如下所示

    在设置属性的代码后面添加

    BeanUtils.setProperty(p1, "birthday", birthday);

    运行结果会报错

    org.apache.commons.beanutils.ConversionException: String must be in JDBC format [yyyy-MM-dd] to create a java.sql.Date
    at org.apache.commons.beanutils.converters.DateTimeConverter.toDate(DateTimeConverter.java:436)
    at org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:343)
    at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:156){name:eric age:0 birthday:null}

    这是因为beanutils不支持字符串转换成其他对象类型。要想转换需要注册一个转换器。

    复制代码
    ConvertUtils.register(new Converter() {
                
                public Object convert(Class type, Object value) {
                    
                    
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        return simpleDateFormat.parse(value.toString());
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return null;
                }
            }, Date.class);
    复制代码

    当遇到java.util.Date类型时,就使用这个转换器,将字符串转换成Date类型。

    完整的代码如下:

    复制代码
    package pkg6;
    
    import java.lang.reflect.InvocationTargetException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.Converter;
    
    public class demo1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Person p1 = new Person();
            String name = "eric";
            String gender = "M";
            int age = 12;
            String birthday = "1991-32-56";
            
            ConvertUtils.register(new Converter() {
                
                public Object convert(Class type, Object value) {
                    
                    
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        return simpleDateFormat.parse(value.toString());
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return null;
                }
            }, Date.class);
            
            
            try {
                BeanUtils.setProperty(p1, "name", "eric");
                BeanUtils.setProperty(p1, "birthday", birthday);
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
            System.out.println(p1);
        }
    
    }
    复制代码

    运行结果如下:

    {name:eric age:0 birthday:Sat Sep 25 00:00:00 CST 1993}

  • 相关阅读:
    更新增加一个门店ID字段的值
    测试成功,修改能运行代码--待优化
    奶粉运营,跑数据三个模板。
    子查询返回多条报错误
    分析跑数口径与表内在关系逻辑
    NAVICAT PREMIUM 初识
    长沙生活
    金蝶用户操作
    EXCEL对比重复数据
    处理链长期检查问题
  • 原文地址:https://www.cnblogs.com/wxldlxt/p/11107595.html
Copyright © 2011-2022 走看看