您的位置:首页 > 移动开发 > Objective-C

Java中Bean与Map/Json/DBObject的相互转换

2014-10-02 19:55 441 查看
Java中Bean与Map/Json/DBObject的相互转换(梦创俱乐部(DAC)-张明宇  2014-10-02)

1.JavaBean

public class Person {

private String name;
private Integer age;
private String job;
private List<String> school;
private String address;
private List<Score> score;
//省略get/set方法
}
public class Score {

private String cource_name;
private Integer cource_score;
//省略get/set方法
}


2.JavaBean与Map相互转换(使用Apache Commons的BeanUtil实现)
//Map<String,Object>转成JavaBean
//测试已通过,Bean中包含另一个Bean成员也可以
public static Object transMap2Bean(Map<String, Object> 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<String,Object>
//测试已通过,Bean中包含另一个Bean成员也可以
public static Map<String, Object> transBean2Map(Object obj) {

if (obj == null) {
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
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)
//json字符串转成JavaBean
//测试已通过
@SuppressWarnings("unchecked")
public static <T> T json2Bean(String jsonString, Class<T> 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驱动是使用的类)
//DBObject转换成JavaBean
//测试已通过
public static <T> 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 <T> 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<Object> list = (List<Object>) param;
dbObject.put(varName, list);
} else if (param instanceof Map) {
Map<Object, Object> map = (Map<Object, Object>) param;
dbObject.put(varName, map);
}
// 恢复访问控制权限
field.setAccessible(accessFlag);
}
return dbObject;
}
5.测试代码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<String, Object> 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<String> schools = new ArrayList<String>();
List<Score> scores = new ArrayList<Score>();
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<String, Object>();
map.put("address", "大连");
map.put("name", "zmy");
map.put("job", "coder");
map.put("age", 21);
List<String> schools = new ArrayList<String>();
schools.add("DLUT");
schools.add("HUK");
map.put("school", schools);
List<Score> scores = new ArrayList<Score>();
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<String, Object> 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!!!");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 类型转换