BeanUtil的jar包下载
https://download.csdn.net/download/qq_39627843/10990429
本文主要讲了BeanUtil 如何给变量赋值,其实也就是主要讲了 setproperty 和converter 两个用法
代码粘上去吧,以后复习可能用到
package mypackage;
import java.util.Date;
import java.util.Vector;
public class Fish
{
String name = "red fish";
int id = 4;
Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Fish()
{
System.out.println("a new fish");
}
public Fish( String name )
{
System.out.println("a new new fish");
this.name = name;
}
}
package mypackage;
import java.awt.*;
import java.awt.image.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.*;
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 Mytest
{
public void test()
{
String fishname = "比目鱼"; //假设用户提交了信息,而后台读取到的是String类
String id = "123";
//这样我们就可以不知道数据类型情况下赋值(其实用到了反射技术)
Fish fish = new Fish();
try {
//但是BeanUtil只支持8中基本类型的赋值
BeanUtils.setProperty(fish, "name", fishname);
BeanUtils.setProperty(fish, "id", id);
System.out.println(fish.name+" "+fish.id);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//利用converter,从而实现任意类型的赋值
@Test
public void test2()
{
Fish fish = new Fish();
String date = "2012-01-01";
//其实关于converter,Apache已经提供了很多converter,不用我们自己写
//例如下面这句可以直接 ConvertUtil.register( new DateConverter(),Date.class); 其中DateConverter已经是有的
ConvertUtils.register( new Converter() {
@Override
public Object convert(Class arg0, Object arg1) //实现接口的转换方法
{ //本方法为String转Date
// TODO Auto-generated method stub
if( !(arg1 instanceof String) ) //如果转换对象不是String类,则抛出一个异常
try {
throw new Exception("只支持String类转换为其他");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if( arg1 == null || ( (String)arg1 ).trim() == null ) //如果为空
return null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try
{
Date d = df.parse((String) arg1);
return d;
} catch (Exception e) {
// TODO Auto-generated catch block
throw new ConversionException(e);
//e.printStackTrace();
}
}
}, Date.class);
try
{
//经过注册converter,可以直接赋值
BeanUtils.setProperty(fish, "date", date);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(fish.date);
}
@Test
//先将值存在map中,然后赋值
public void test3()
{
Map map = new HashMap();
map.put("name", "a fish's name");
map.put("date", "2000-12-12");
ConvertUtils.register(new DateLocaleConverter(), Date.class);
//DateLocaleConverter看起来更直观
Fish fish = new Fish();
try
{
BeanUtils.populate(fish, map); //直接赋值
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(fish.date);
}
}