`
bugyun
  • 浏览: 551489 次
社区版块
存档分类
最新评论

JavaBean与Map对象互相转化

    博客分类:
  • Java
 
阅读更多
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * 项目名称:JavaBean与Map对象互相转化 
 * 类名称:BeanMapUtil.java 
 * 类描述: 
 * 创建人:beyond 
 * 创建时间:2016-5-11 下午4:03:07 
 * 修改人: 
 * 修改时间: 
 * 修改备注: 
 * @version
 */
public class BeanMapUtil {

	public static void main(String[] args) throws IntrospectionException,
			IllegalAccessException, InstantiationException,
			InvocationTargetException {
		User user = new User();
		user.setAge(1);
		user.setId(2);
		@SuppressWarnings("unchecked")
		Map<String, Integer> map = BeanMapUtil.convertBean(user);
		for (Object o : map.keySet()) {
			System.out.println(o + "," + map.get(o));
		}

		// Map map = new HashMap();
		// map.put("id", 1);
		// map.put("age", 21);
		// User user = new User();
		// user = (User) convertMap(User.class, map);
		// System.err.println(user.getAge());
	}

	/**
	 * 将一个 Map 对象转化为一个 JavaBean
	 * 
	 * @param type
	 *            要转化的类型
	 * @param map
	 *            包含属性值的 map
	 * @return 转化出来的 JavaBean 对象
	 * @throws IntrospectionException
	 *             如果分析类属性失败
	 * @throws IllegalAccessException
	 *             如果实例化 JavaBean 失败
	 * @throws InstantiationException
	 *             如果实例化 JavaBean 失败
	 * @throws InvocationTargetException
	 *             如果调用属性的 setter 方法失败
	 */
	@SuppressWarnings("rawtypes")
	public static Object convertMap(Class type, Map map)
			throws IntrospectionException, IllegalAccessException,
			InstantiationException, InvocationTargetException {
		BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性
		Object obj = type.newInstance(); // 创建 JavaBean 对象

		// 给 JavaBean 对象的属性赋值
		PropertyDescriptor[] propertyDescriptors = beanInfo
				.getPropertyDescriptors();
		for (int i = 0; i < propertyDescriptors.length; i++) {
			PropertyDescriptor descriptor = propertyDescriptors[i];
			String propertyName = descriptor.getName();

			if (map.containsKey(propertyName)) {
				// 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
				Object value = map.get(propertyName);

				Object[] args = new Object[1];
				args[0] = value;

				descriptor.getWriteMethod().invoke(obj, args);
			}
		}
		return obj;
	}

	/**
	 * 将一个 JavaBean 对象转化为一个 Map
	 * 
	 * @param bean
	 *            要转化的JavaBean 对象
	 * @return 转化出来的 Map 对象
	 * @throws IntrospectionException
	 *             如果分析类属性失败
	 * @throws IllegalAccessException
	 *             如果实例化 JavaBean 失败
	 * @throws InvocationTargetException
	 *             如果调用属性的 setter 方法失败
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static Map convertBean(Object bean) throws IntrospectionException,
			IllegalAccessException, InvocationTargetException {
		Class type = bean.getClass();
		Map returnMap = new HashMap();
		BeanInfo beanInfo = Introspector.getBeanInfo(type);

		PropertyDescriptor[] propertyDescriptors = beanInfo
				.getPropertyDescriptors();
		for (int i = 0; i < propertyDescriptors.length; i++) {
			PropertyDescriptor descriptor = propertyDescriptors[i];
			String propertyName = descriptor.getName();
			if (!propertyName.equals("class")) {
				Method readMethod = descriptor.getReadMethod();
				Object result = readMethod.invoke(bean, new Object[0]);
				if (result != null) {
					returnMap.put(propertyName, result);
				} else {
					returnMap.put(propertyName, "");
				}
			}
		}
		return returnMap;
	}
}

class User {
	private int id;
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

 

分享到:
评论

相关推荐

    Javabean和map相互转化方法代码示例

    Javabean和map相互转化方法代码示例 在 Java 开发中,经常需要将 JavaBean 对象和 Map 对象相互转换。例如,在导入数据时,可能需要将 Map 对象转换为 JavaBean 对象,以便更方便地处理数据。本文将介绍 JavaBean ...

    beanutils的jar包.zip

    在描述中提到的“json转化JavaBean对象封装键值对参数”,意味着我们将讨论如何使用BeanUtils来处理JSON数据与JavaBean之间的相互转换。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web...

    Dm4J操作xml文件.rar

    这个库允许开发者将XML文档中的节点与JavaBean对象相互转换,同时提供了多种查询方法,使得处理XML变得更加方便。 首先,让我们深入了解一下Dm4J的核心功能: 1. **XML节点与JavaBean的映射**:Dm4J通过解析XML...

    java操作mongodb时,对象bean和DBObject相互转换的方法(推荐)

    在Java中操作MongoDB数据库时,常常需要将Java对象(对象Bean)与MongoDB的数据表示对象DBObject进行相互转换。这主要是因为MongoDB的驱动程序使用DBObject来存储和检索数据,而我们通常会用面向对象的方式来定义和...

    Json工具类

    综上所述,`Json工具类`主要是为了方便开发者在Java项目中进行JSON数据的处理,通过引入Gson或json-lib库,可以轻松地完成对象与JSON字符串之间的相互转化,从而简化数据交换的流程。在具体使用时,根据项目需求和...

    json jar包

    它能够将数组、集合、Map、日期等Java类型转化为JSON格式,并能从JSON字符串中反序列化回Java对象。 2. **ezmorph-1.0.3.jar**:Ezmorph库是一个用于Java对象转换的工具,它允许开发者在运行时将一种类型的对象转换...

    json运行所必须的jar包

    Json-lib提供了将JSON与Java对象(如JavaBean、Map、List等)相互转换的功能,使得在Java中操作JSON变得更加简单。 5. **ezmorph-1.0.6.jar**:Ezmorph库主要用于对象的转换,它提供了一种动态的方式来转换Java对象...

    java json使用的jar包

    Json-lib是一个支持多种Java环境和JSON实现的库,提供了将JSON与其他Java数据结构(如JavaBean、Map、List等)相互转换的功能。 2. `commons-collections-3.2.jar`:Apache Commons Collections库,提供了对集合...

    fastjson-1.2.35.jar

    它支持JavaBean、Map、List等多种Java类型与JSON字符串之间的无缝转换。Fastjson的设计理念是简洁、高效,通过优化的算法和内存管理,使得在处理大规模数据时也能保持较快的速度。 二、Fastjson主要特性 1. **高...

    net.sf.json 依赖的jar包(6个)

    在JSON与Java对象转换过程中,BeanUtils可以便捷地将JSON对象映射到JavaBean,反之亦然。 5. **org.apache.commons.logging**: Apache Commons Logging提供一个接口,用于实现日志记录,它允许开发者选择不同的日志...

    json解析数据所需要的jar包

    BeanUtils库可以帮助我们将Java对象与JSON字符串之间进行相互转换,而Collections4库则提供了处理复杂数据结构的工具,使我们能够轻松地管理从JSON解析出来的数据。 为了在Java项目中使用这些库,你需要将这两个JAR...

    JS和JAVA使用JSON方法解析汇报.docx

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立...而在Java中,可以借助json-lib等库进行JSON对象和Java对象的相互转换。理解这些方法和库可以帮助开发者更高效地进行数据交换和处理。

    apache commons工具集代码详解

    除了克隆对象外,BeanUtils还可以将一个Map对象转化为一个Bean对象,例如: ```java Map map = new HashMap(); map.put("name","tom"); map.put("email","tom@"); map.put("age","21"); Person person = new Person...

    java公司面试题

    每个成员都应该具备责任感和使命感,积极主动地与他人沟通交流,互相帮助解决问题,从而提高整个团队的工作效率和创新能力。此外,尊重他人的意见和建议,保持开放的心态也是培养良好团队意识的重要方面。

    最全Java面试题汇总(一)

    - **序列化**:将对象的状态转化为字节流,以便于存储或在网络上传输。 - **实现方式**:对象需要实现 `Serializable` 接口;通过 `ObjectOutputStream` 类的 `writeObject` 方法将对象写出到流中。 #### 7. 题目...

    Java常用类库Apache Commons工具类说明及使用实例详解

    它可以将一个Map对象转化为一个Bean,或者将一个Bean对象转化为一个Map对象。例如: ```java import org.apache.commons.beanutils.BeanUtils; Map map = new HashMap(); map.put("name","tom"); map.put("email",...

Global site tag (gtag.js) - Google Analytics