博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用BeanUtils设置属性转换String到Date类型
阅读量:6651 次
发布时间:2019-06-25

本文共 4582 字,大约阅读时间需要 15 分钟。

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

 

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}

 

转载地址:http://anjto.baihongyu.com/

你可能感兴趣的文章
快捷键打开服务
查看>>
感知器神经网络
查看>>
mysql 常见的备份架构及技术
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
常用思科设备图标(JPG+矢量图)
查看>>
Redis主从持久化测试
查看>>
DOCKER网络代理设置
查看>>
Xamarin 学习笔记 - Page(页面)
查看>>
Azure运维系列 8:使用现有磁盘创建虚拟机
查看>>
Spread for Windows Forms高级主题(8)---通过暂停布局提高性能
查看>>
SaltStack入门(二)Grains、NoteGroup和State
查看>>
Android系统的开机画面显示过程分析(11)
查看>>
统一沟通-技巧-6-Jeff Schertz-博文-地址-汇总-2011-04-08
查看>>
powershell命令大全
查看>>
Windows Server 2012 从入门到精通系列之如何提高DC持续性?
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(6)
查看>>
skullsecurity作者常用的一些linux命令
查看>>
系统集成工程师--想说爱你不容易
查看>>
同质化严重,手机智能化发展方向今安在?
查看>>
在IIS8添加WCF服务支持
查看>>