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

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!!!");
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值