博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BeanUtils String转Date注册器
阅读量:4934 次
发布时间:2019-06-11

本文共 4634 字,大约阅读时间需要 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}

转载于:https://www.cnblogs.com/wxldlxt/p/11107595.html

你可能感兴趣的文章
【转载】关于跳槽
查看>>
机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
查看>>
Unity--- 资源路径问题
查看>>
页面点击飘字
查看>>
js中定时器相关
查看>>
RecipientsEditor-信息收件人输入框
查看>>
8lession-基础类型转化
查看>>
线程同步复习
查看>>
Nginx http反向代理流程Proxy_pass模块
查看>>
HTML5 新元素标签系列:使用 HTML5 设计自己的博客
查看>>
51CTO大赛,欢迎投博主一票
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
《那些年啊,那些事——一个程序员的奋斗史》——91
查看>>
简单的学生管理系统
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>
TNS-12537,TNS-12560,TNS-00507 Linux Error: 29: Illegal seek解决
查看>>