使用BeanUtils操作javabean是非常简易的,但是默认支持的字符串转日期类,有bug,这里我解析一下BeanUtils的使用,和自己写日期转换器的
使用beanutils必须先导入两个jar包:
Beanutils下载地址:http://commons.apache.org/beanutils/download_beanutils.cgi(选择里面
commons-beanutils-1.8.3.jar)
Loging下载地址:
http://commons.apache.org/logging/download_logging.cgi(选择里面的commons-logging-1.1.1.jar)
package com.beanutils.domain;
import java.util.Date;
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person() {
super();
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
private String age;
private Date date;
}
//测试类
package com.beanutils.domain;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;
public class Demo1 {
public void TestNeed() throws Exception {// 设置指定的属性值
Person p = new Person();
String name = "aaa";
BeanUtils.setProperty(p, "name", name);
}
@Test
public void ConvertFactory() throws Exception {// 由于java自带的jdk的日期转换器,有Bug,s所有这我们自己实现一个
String date = "2012-09-17";
ConvertUtils.register(new Converter() {// 是一个接口,new接口要实现接口里面的方法;
@Override
public Object convert(Class arg0, Object value) {
if (value == null) {// 判断是否为空
return null;
}
if (!(value instanceof String)) {// 判断是否为String类型
throw new ConversionException("只能传进String类型作为参数");
}
String str = (String) value;
if (str.trim().equals("")) {// 判断是否为空
return null;
}
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
try {
return sd.parse(str);// 避免格式不对,错的抛异常,这是
// ConvertUtils.register(new
// DateLocaleConverter(),Date.class);没有考虑到的bug所在
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}, Date.class);// 注意,这里你要转换的类型,不能写错
Person p = new Person();
BeanUtils.setProperty(p, "date", date);
System.out.println(p.getDate());
}