一 前言
上一文章自己写得JavaBean转Map,其实apache组织已经封装了好多功能包,其中就包含commons-beanutils
apache组织的commons项目下的常用组件:
commons-beanutils:提供了操作JavaBean的很多工具类.
commons-long3:提供了Java语言增强的很多工具类.
二 用法
复制 commons-beanutils-1.9.2.jar()到项目的lib文件下,addbuildPath
上面这个类还依赖commons-logging-1.2.jar 复制到项目的lib文件下,addbuildPath
package com.OSA.Day01.JavaBean_02;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
//@Setter 为所有字段生成set方法
//@Getter 为所有字段生成get方法
//@ToString 生成toString()方法
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person_02 {
private Long id;
private String firstName;
private String lastName;
private boolean man;
}
package com.OSA.Day01.JavaBean_02;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtilText {
/**
* @param args
* @throws Exception
* @throws IllegalAccessException
*/
public static void main(String[] args) throws IllegalAccessException,
Exception {
Person_02 p = new Person_02();
Map<String, Object> mp = new HashMap<String, Object>();
mp.put("id", "");
mp.put("lastName", "xiaolin");
mp.put("firstName", "zhang");
mp.put("man", false);
// 把一个Map/javaBean对象中的数据拷贝到另一个对象中
BeanUtils.copyProperties(p, mp);
System.out.println(p);
// javaBean对象拷贝到javaBean对象
Person_02 p2 = new Person_02();
BeanUtils.copyProperties(p2, mp);
System.out.println(p2);
// 获取属性
String value = BeanUtils.getProperty(p2, "firstName");
System.out.println(value);
}
}
打印结果
Person_02(id=0, firstName=zhang, lastName=xiaolin, man=false)
Person_02(id=0, firstName=zhang, lastName=xiaolin, man=false)
zhang
三 使用注意点
1 支持类型转换,如果在mp中设置id的值为字符串也会自动转换为真实的long类型
Map<String, Object> mp = new HashMap<String, Object>();
mp.put("id", "123");
mp.put("lastName", "xiaolin");
mp.put("firstName", "zhang");
mp.put("man", false);
mp.put("fireDate", new java.util.Date());
2 如果javaBean对象中有对象类型的,不支持map中的字符串转换Data类型
public class Person_02 {
private Long id;
private String firstName;
private String lastName;
private boolean man;
private java.util.Date fireDate;
}
赋值字符串过程会报错
Person_02 p = new Person_02();
Map<String, Object> mp = new HashMap<String, Object>();
mp.put("id", "123");
mp.put("lastName", "xiaolin");
mp.put("firstName", "zhang");
mp.put("man", false);
mp.put("fireDate", "2018/12/25");
// 把一个Map/javaBean对象中的数据拷贝到另一个对象中
BeanUtils.copyProperties(p, mp);
解决方法
Person_02 p = new Person_02();
Map<String, Object> mp = new HashMap<String, Object>();
mp.put("id", "");
mp.put("lastName", "xiaolin");
mp.put("firstName", "zhang");
mp.put("man", false);
mp.put("fireDate", "2018/12/25");
//创建转换 默认给值为null
DateConverter dateConverter = new DateConverter(null);
//设置支持的字符串格式
dateConverter.setPatterns(new String[]{"yyyy/MM/dd"});
ConvertUtils.register(dateConverter, java.util.Date.class);
//设置如果字符串传“”空字符串赋值为0,实际应该赋值为“”认为是null
ConvertUtils.register(new LongConverter(null), Long.class);
// 把一个Map/javaBean对象中的数据拷贝到另一个对象中
BeanUtils.copyProperties(p, mp);
System.out.println(p)
打印
Person_02(id=null, firstName=zhang, lastName=xiaolin, man=false, fireDate=Tue Dec 25 00:00:00 CST 2018)
Person_02(id=null, firstName=zhang, lastName=xiaolin, man=false, fireDate=Tue Dec 25 00:00:00 CST 2018)
四 其他jar包
同时commons-lang3-3.1.jar也增强了系统的lang包,用数组等工具类可以使用