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

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. CF 557B(Pasha and Tea-贪心)

    B. Pasha and Tea time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. UE查找和替换技巧实例

    1 删除多余的空行 如果是在WORD中,则查找^p^p替换为^p. 如果是在EXCEL里,则为全部选中,然后点击编辑,定位,定位条件,空值. 将全部选中空白的行,如图所示 再次点击编辑,删除,删除整行 ...

  3. Activity基本跳转

    详细解释:http://blog.csdn.net/xiazdong/article/details/7664757 简单介绍activity的跳转,通过intent实现,详细的注释在代码中.涉及到a ...

  4. remote: ERROR: missing Change-Id in commit message footer

    remote: ERROR: missing Change-Id in commit message footer [摘要:git 提交到近程版本库失足:remote: ERROR: missing ...

  5. Flume wasn't able to parse timestamp header

    来自:http://caiguangguang.blog.51cto.com/1652935/1384187 flume bucketpath的bug一例 测试的配置文件: 1 2 3 4 5 6 7 ...

  6. 你的灯亮着吗pdf –读书笔记

      十句话概括这本书   1.确认问题比找到方法更重要 2.解决问题其实解决的是"人的期待" 3.你在解决问题中可能会发现新的机会 4.要了解问题的可变性和复杂性 5.站在用户而不 ...

  7. java正则表达式简介

    Java的正则表达式讲解:(为了能看清,本文正则表达式用中文的句号代替英文句点) 1 英文句点符号:匹配单个任意字符. eg: 表达式”t.o  可以匹配:tno,t#o,teo等等.不可以匹配:tn ...

  8. eclipse 打包 apk 文件

    1.通过eclipse中的file ,点击Import 导入项目 2.选择Android 中的 Existing Android Code Into Workspace 3.通过 Brower 引入项 ...

  9. 解决this web application instance has been stopped already

    重启tomcat的时候出错 Illegal access: this web application instance has been stopped already.  Could not loa ...

  10. 解决Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉

    有这种错误让人很恼火,因为并不知道是哪个文件引起的整个项目错误.所以我们可以打开下边的错误按钮,看看是什么问题. 1.如果是因为java compiler level does not match t ...