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}

  • 相关阅读:
    UVA 10564 Paths through the Hourglass DP
    HDU 3397 Sequence operation 线段树 成段更新 区间合并
    HDU 3308 LCIS 线段树 单点更新+区间合并
    POJ 3667 Hotel 线段树 区间合并
    UVALive 3942 Remember the Word Tire+DP
    POJ 1703 Find them, Catch them
    UVA 1366 Martian Mining DP
    UVA 1456 Cellular Network 贪心+DP
    UVA 11573 Ocean Currents
    【ACM】hdu_zs1_1003_放大的X _201307271557
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/5989790.html
Copyright © 2011-2022 走看看