BeanUtils常用方法

来源:互联网 发布:物理补课软件 编辑:程序博客网 时间:2024/05/29 07:23

BeanUtils是一个比较常用的工具类

1.BeanUtils.copyProperties(dest, orig) 将一个form封装到另一个Bean中

PersonForm是用于接收页面所有数据的表单,我先用构造方法赋值,假设已经收集到页面提交的数据了

PersonForm personForm = new PersonForm("张三", "23");
在没用BeanUtils时我们会这样封装:

Person p = new Person();p.setName(personForm.getName());p.setAge(personForm.getAge());

但当我们用了BeanUtils可读性就非常高,而且非常方便:

Person p = new Person();PersonForm personForm = new PersonForm("张三", "23");BeanUtils.copyProperties(p, personForm);//会抛出异常System.out.println(p.toString());

2.BeanUtils.populate(bean, map);将一个map封装到一个bean中

public class Person {//有get/set方法,没写,占地,不用他也能说明问题private String name;private String age;private Date brith;//java.util.Date;}

赋值方式用map赋值

Map map = new HashMap();map.put("name", "wn");map.put("age", "23");map.put("birth", "2016-12-23");Person p = new Person();BeanUtils.populate(p, map);

结果:


可以看到birth并没有赋值成功,原因是Date类型属于比较复杂的类型!注册时间转换器

public class MyConvert implements Converter{@Overridepublic Object convert(Class clazz, Object value) {//值是非空判断if(value==null){return null;}//判断要转换的类型是否为Date类型,if(clazz!=java.util.Date.class) {return null;}//判断value是否为字符串的实例if(value instanceof String){if(StringUtils.isNotBlank((String) value)){return java.sql.Date.valueOf((String)value); }}return value;}}
然后在BeanUtils.populate(p.map);方法之前注册转换器
ConvertUtils.register(new MyConvert(), Date.class);//注册转换器,参数:1.MyConvert2.Date.class:MyConvert中clazz的实参。
所以:当vo表单中有"2016-12-23"这样的字符串时,而bean对应该属性的类型为Date,写一个MyConvert实现 Converter接口,重写convert方法,把输入值value做判断,把clazz做判断,然后转换后返回回去。别忘注册转换器。
3.ConvertUtils.convert(value,clazz)转换器
Object obj1 = ConvertUtils.convert("1234", long.class);long[] obj2 =  (long[]) ConvertUtils.convert(new String[]{"1","2","3"}, long.class);//可以批量转换数据~~~斯国一
可以看到遍历的结果也是可以转换
还有个问题?
这俩都能将String转换成long,有没有啥效率或值得注意的地方啊?
Object obj1 = ConvertUtils.convert("1234", long.class);System.out.println(obj1);Object obj3 = Long.parseLong("1234");System.out.println(obj3);




0 0
原创粉丝点击