Java中Bean与Map/Json/DBObject的相互转换
1.JavaBean [java] view plaincopy public class Person {
private String name;
private Integer age;
private String job;
private List school;
private String address;
private List score;
//省略get/set方法
}
[java] view plaincopy public class Score {
private String cource_name;
private Integer cource_score;
//省略get/set方法
}
2.JavaBean与Map相互转换(使用Apache Commons的BeanUtil实现) [java] view plaincopy //Map转成JavaBean
//测试已通过,Bean中包含另一个Bean成员也可以
public static Object transMap2Bean(Map map, Object obj) {
if (map == null || obj == null) {
return null;BeanUtils
}
try {
BeanUtils.populate(obj, map);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return obj;
}
//JavaBean转成Map
//测试已通过,Bean中包含另一个Bean成员也可以
public static Map transBean2Map(Object obj) {
if (obj == null) {
return null;
}
Map map = new HashMap();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo
.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
// 过滤class属性
if (!key.equals("class")) {
// 得到property对应的getter方法
Method getter = property.getReadMethod();
Object value = getter.invoke(obj);
map.put(key, value);
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return map;
}
3.JavaBean与Json相互转换(使用JSONObject实现,需要导入json-lib.jar) [java] view plaincopy //json字符串转成JavaBean
//测试已通过
@SuppressWarnings("unchecked")
public static T json2Bean(String jsonString, Class beanCalss) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
T bean = (T) JSONObject.toBean(jsonObject, beanCalss);
return bean;
}
//JavaBean转成json字符串
//测试已通过
public static String beanToJson(Object bean) {
JSONObject json = JSONObject.fromObject(bean);
return json.toString();
}
4.JavaBean与DBObject相互转换(DBObject是MongoDB在Java驱动是使用的类) [java] view plaincopy //DBObject转换成JavaBean
//测试已通过
public static T dbObject2Bean(DBObject dbObject, T bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
if (bean == null) { //测试已通过
return null;
}
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
String varName = field.getName();
Object object = dbObject.get(varName);
if (object != null) {
BeanUtils.setProperty(bean, varName, object);
}
}
return bean;
}
@SuppressWarnings("unchecked")
public static DBObject bean2DBObject(T bean) throws IllegalArgumentException, IllegalAccessException {
if (bean == null) {
return null;
}
DBObject dbObject = new BasicDBObject();
// 获取对象对应类中的所有属性域
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
// 获取属性名
String varName = field.getName();
// 修改访问控制权限
boolean accessFlag = field.isAccessible();
if (!accessFlag) {
field.setAccessible(true);
}
Object param = field.get(bean);
if (param == null) {
continue;
} else if (param instanceof Integer) {// 判断变量的类型
int value = ((Integer) param).intValue();
dbObject.put(varName, value);
} else if (param instanceof String) {
String value = (String) param;
dbObject.put(varName, value);
} else if (param instanceof Double) {
double value = ((Double) param).doubleValue();
dbObject.put(varName, value);
} else if (param instanceof Float) {
float value = ((Float) param).floatValue();
dbObject.put(varName, value);
} else if (param instanceof Long) {
long value = ((Long) param).longValue();
dbObject.put(varName, value);
} else if (param instanceof Boolean) {
boolean value = ((Boolean) param).booleanValue();
dbObject.put(varName, value);
} else if (param instanceof Date) {
Date value = (Date) param;
dbObject.put(varName, value);
} else if (param instanceof List) {
List list = (List) param;
dbObject.put(varName, list);
} else if (param instanceof Map) {
Map map = (Map) param;
dbObject.put(varName, map);
}
// 恢复访问控制权限
field.setAccessible(accessFlag);
}
return dbObject;
}
5.测试代码 [java] view plaincopy package test;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.zmy.bean.Person;
import com.zmy.bean.Score;
import com.zmy.util.BeanUtil;
import com.zmy.util.DBObjectUtil;
public class ConvertTest {
private Person person = null;
private Map map = null;
@Before
public void initBean(){
person = new Person();
Score score1 = new Score();
Score score2 = new Score();
person.setAddress("大连");
person.setAge(21);
person.setJob("coder");
person.setName("zmy");
List schools = new ArrayList();
List scores = new ArrayList();
schools.add("DLUT");
score1.setCource_name("course1");
score1.setCource_score(85);
score2.setCource_name("course2");
score2.setCource_score(80);
scores.add(score1);
scores.add(score2);
person.setSchool(schools);
person.setScore(scores);
}
@Before
public void initMap(){
map = new HashMap();
map.put("address", "大连");
map.put("name", "zmy");
map.put("job", "coder");
map.put("age", 21);
List schools = new ArrayList();
schools.add("DLUT");
schools.add("HUK");
map.put("school", schools);
List scores = new ArrayList();
Score score1 = new Score();
Score score2 = new Score();
score1.setCource_name("course1");
score1.setCource_score(85);
score2.setCource_name("course2");
score2.setCource_score(80);
scores.add(score1);
scores.add(score2);
map.put("score", scores);
}
@Test
public void testBean2Map(){
Map map = BeanUtil.transBean2Map(person);
System.out.println(map.toString());
}
@Test
public void testMap2Bean(){
Person person = (Person) BeanUtil.transMap2Bean(map, new Person());
System.out.println(person.getName());
}
@Test
public void testBean2Json(){
String json = BeanUtil.beanToJson(person);
System.out.println(json);
Person person2 = BeanUtil.json2Bean(json, Person.class);
System.out.println(person2.getName());
}
@Test
public void testDBObject2Bean(){
DBObject dbObject = new BasicDBObject(map);
try {
Person p = BeanUtil.dbObject2Bean(dbObject, new Person());
System.out.println(p.getName());
} catch (IllegalAccessException | InvocationTargetException
| NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("转换error!!!");
}
}
@Test
public void testBean2DBObject(){
try {
DBObject dbObject = DBObjectUtil.bean2DBObject(person);
System.out.println(dbObject.get("score"));
System.out.println(person.getScore());
} catch (IllegalArgumentException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("转换error!!!");
}
}
}