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

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 = ;
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 = ;
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}

使用BeanUtils设置属性转换String到Date类型的更多相关文章

  1. JS中String类型转换Date类型 并 计算时间差

    JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...

  2. 记springboot 实体类String转Date类型的坑

    前端传入一个String的时间字符串如:2019-07-18 23:59:59 后端实体类要在头顶加注解: @DateTimeFormat(pattern = "yyyy-MM-dd HH: ...

  3. js中关于string转date类型的转换

    var date_up = input.split("-");//input表示string类型(时间例如:2017-11-12 10:07:36.653) var date_do ...

  4. Date类型与String类型的相关问题

    今天完成boss交代的任务时,遇到Date类型与String类型的相关问题,参考了网上的一些例子,并且自己写了demo,现在记录下了总结一下: (一)判断一个字符串是不是合法的日期格式 public ...

  5. String转Date的类型转换器

    import org.apache.commons.beanutils.Converter; import org.apache.commons.lang.StringUtils; /* * 定义转换 ...

  6. Java中Date类型与String 类型之间的互相转换

    Java中String类型和Date类型之间的转换 我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需 ...

  7. Date、String、Calendar类型之间的转化

    原文出处:http://fjfj910.iteye.com/blog/1202219 1.Calendar 转化 String  //获取当前时间的具体情况,如年,月,日,week,date,分,秒等 ...

  8. flex4 日期类型字符串转日期类型(string转Date)(转)

    mysql数据库中存储的日期类型通过PHP返回到flex端为字符串类型,这样在flex中进行处理时就必须要将字符串转化为Date类型.如果仅仅是 "年/月/日" 的组合,而没有涉及 ...

  9. Java——string类型与date类型之间的转化

    String类型转化为Date类型 方法一 Date date=new Date("2019-01-25"); 方法二 String =(new SimpleDateFormat( ...

随机推荐

  1. .NET-"/"应用程序中的服务器错误

    当出现这个问题的时候,就在web.config文件中加上代码:<customErrors mode="Off"/> 然后重新访问站点就能看到问题所在了,例如我的错误显示 ...

  2. 在CentOS/RHEL上设置SSH免密码登录

    本文会告诉你怎样在 CentOS/RHEL 上设置 SSH 免密码登录.自动登录配置好以后,你可以通过它使用 SSH (Secure Shell)和安全复制 (SCP)来移动文件. SSH 是开源的, ...

  3. cognos report上钻下钻报表处理方法(2)

    在此之前已经说过了在报表本身单个维度上面的上钻与下钻,本次说的是传递参数追溯到其他报表.比如从部门追溯到部门每一位员工的数据分析, 如图:报表1 点击信托业务一总部跳转到下面的报表2,显示每一位执行经 ...

  4. Hyper-V如何应用新的网卡

    最近新装了块网卡,可是在Hyper-V的虚拟机设置里怎么也找不到如何应用这个新网卡.   把我郁闷坏了. 偶尔点点,才发现原来不是在虚拟机的设置里面,而是在上面的一级设置. 新建完后就可以在虚拟机的网 ...

  5. 在不重装系统的情况下撤底删除oracle数据库及oralce的相关软件

    先从控制面板删除oracle的相关应用及数据库, 删除系统变量 ORACLE_OEM_CLASSPATH=%JAVA_HOME%\lib\ext\access-bridge-64.jar;%JAVA_ ...

  6. [React GraphQL] Pass Parameters to urql's useQuery React Hook

    Showing how to use 'uqrl' library to do GraphQL in React. import React, {useState} from 'react' impo ...

  7. CSS种让border-bottom大道text-decoration一样的效果,甚至要比它的效果更理想一些!

    <p style="width:300px;line-height: 30px;margin:0 auto;text-indent: 24pt;word-break:break-all ...

  8. HDU4666+POJ2926【最远曼哈顿距离】

    一开始就明白那个N*1<k的算法了, 可无奈删除操作耗时还是太多,最后学习了STL set,map相应的用法,方便好多. STL真的是一个好工具 #include<iostream> ...

  9. Oracle体系结构四(学习笔记)

  10. html中文乱码问题的解决

    当我试着用html写代码的时候,发现直接保存的文件用浏览器打开时中文显示是乱码的,所以我找了一些解决方法,可是原因不太明白,所以我也就不解释了,能够自己找找原因,以下提供解决方法: 在写的html的第 ...