`

通过反射实现map和bean之间的转换

    博客分类:
  • Java
 
阅读更多

直接看代码:

 

public class ConvertUtil {

	private static final Logger logger = Logger.getLogger(ConvertUtil.class);

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		OrgResponse resp = new OrgResponse();
		resp.setAccountNumber("12346");
		resp.setCustomerID("5566");
		resp.setPassword("hello1sa");

//		Map<String, Object> resultMap = ConvertUtil.convertBeanToMap(resp);
//		System.out.println("convertSimpleBeanToMap result: ");
//		for (Entry<String, Object> en : resultMap.entrySet()) {
//			logger.info(en.getKey() + ": " + en.getValue());
//		}
//
//		OrgResponse newRes = convertMapToBean(resultMap, resp);
//		System.out.println("convertMapToSimpleBean result: ");
//		logger.info(newRes.getAccountNumber()+", " + newRes.getCustomerID() + ", "
//				+ newRes.getPassword());


	}

	/**
	 * Use Reflection to convert Map to java Bean, Ignore the upper/lower case of attributes letters.
	 *
	 */
	public static <T> T convertMapToBean(Map<String, Object> map, T t) {
		Set<Entry<String, Object>> entrySet = map.entrySet();
		for (Entry<String, Object> et : entrySet) {
			String key = et.getKey().toLowerCase(); // convert to lower case
			Object value = et.getValue();

			List<Method> list = new ArrayList<Method>();
			getObjSetMethodsWithExtends(t.getClass(), list);
			for (int i = 0; i < list.size(); i++) {
				String name = list.get(i).getName();// method name
				if (!changeStrToSetMethodNames(key).equalsIgnoreCase(name))
					continue;
				try {
					list.get(i).invoke(t, value);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
				break;
			}
		}
		return t;
	}

	/**
	 * Use Reflection to convert java Bean to Map
	 *
	 */
	public static <T> Map<String, Object> convertBeanToMap(T t) {
		Map<String, Object> map = new HashMap<String, Object>();

		Class cls = t.getClass();
		Field[] fieldlist = cls.getDeclaredFields();
		for (int i = 0; i < fieldlist.length; i++) {
			Field f = fieldlist[i];
			String name = f.getName();
			Class<?> cs = f.getType();
			try {
				String methodNme = changeStrToGetMethodNames(name);
				Method meth = null;
				Method[] mds = cls.getDeclaredMethods();
				for (int j = 0; j < mds.length; j++) {
					if (mds[j].getName().equals(methodNme)) {
						meth = cls.getMethod(methodNme);
						Object rtcs = meth.invoke(t, null);
						map.put(name, rtcs);
						break;
					}
				}
				if (meth == null) {
					logger.info("Can not find the method " + methodNme + " in class " + t.getClass().getName());
				}

			} catch (SecurityException e) {
				logger.error(e.getMessage(), e);
			} catch (NoSuchMethodException e) {
				logger.error(e.getMessage(), e);
			} catch (IllegalArgumentException e) {
				logger.error(e.getMessage(), e);
			} catch (IllegalAccessException e) {
				logger.error(e.getMessage(), e);
			} catch (InvocationTargetException e) {
				logger.error(e.getMessage(), e);
			}
		}
		return map;
	}

	private static String changeStrToSetMethodNames(String str) {
		if (str == null || "".equals(str.trim()))
			return null;
		char firstChar = str.toCharArray()[0];
		String upstr = String.valueOf(firstChar).toUpperCase();
		return "set" + upstr + str.substring(1);
	}

	private static String changeStrToGetMethodNames(String str) {
		if (str == null || "".equals(str.trim()))
			return null;
		char firstChar = str.toCharArray()[0];
		String upstr = String.valueOf(firstChar).toUpperCase();
		return "get" + upstr + str.substring(1);
	}

	private static void getObjSetMethodsWithExtends(Class<?> cls, List<Method> list) {
		if (cls.equals(Object.class)) {
			return;
		}

		Method[] mds = cls.getDeclaredMethods();
		for (int i = 0; i < mds.length; i++) {
			if (!mds[i].getName().startsWith("set"))
				continue;
			list.add(mds[i]);
		}
		getObjSetMethodsWithExtends(cls.getSuperclass(), list);
	}

}

  

分享到:
评论

相关推荐

    通过java反射实现map与bean之间互转

    在给定的标题“通过java反射实现map与bean之间互转”中,我们要探讨的是如何利用Java反射机制将Map对象转换为Java Bean对象,以及反过来,将Java Bean对象转换为Map对象。这个过程在数据处理和序列化中非常常见。 ...

    map 和 bean 之间的转换

    map 和 bean 之间的转换,可以利用反射的原理实现

    java Map转换成bean,利用java反射以及java和bean包

    总之,Java Map到Bean的转换是通过反射和JavaBeans规范实现的,这是Java开发中常用的一种数据转换技巧。理解并熟练运用这些知识,能够帮助我们更高效地处理各种数据结构,提升代码的灵活性。在实际项目中,可以根据...

    Map和Bean灵活转换工具类

    另一方面,`BeanUtils`类则是用于在Java Bean对象之间进行属性复制,或者将Java Bean转换为Map。这个工具类提供了一系列的方法,如`copyProperties()`,可以将一个Bean的属性值复制到另一个Bean中,实现了对象间的...

    java bean和map之间的互转

    转换Java Bean到Map的过程通常是通过反射机制来实现的。以下是一个简单的示例: ```java import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class BeanToMapConverter { ...

    Java Bean对象和Map相互转换.zip

    这里,`JSON.toJSONString(myBean)`将Java Bean转换为JSON字符串,然后`JSON.parseObject()`再将其解析成Map。 2. **Fastjson进行Map到Java Bean的转换**: 反过来,我们也可以将Map转换回Java Bean对象: ```...

    深度转换Bean<->Bean的Mapper

    这种转换对于数据模型间的映射非常有用,例如在业务逻辑层和数据访问层之间,或者在API响应与内部模型之间。 在描述中提到的博文链接中,作者可能详细解释了如何使用BeanMapper进行转换操作。通常,这类库提供了一...

    map与Javabean相互转换实例

    本文将深入探讨如何通过反射机制实现`Map`和`JavaBean`的相互转换。 首先,我们要理解`JavaBean`的基本概念。`JavaBean`是符合JavaBeans规范的类,它通常具有公共的无参构造器、getter和setter方法以及私有的属性,...

    各种转换,xml,实体bean,动态bean,map等

    在实际应用中,比如“动态bean转换”,可能指的是将动态生成的bean对象转换为其他格式,如XML字符串或Map,以便进一步处理或存储。同时,“entryBean”可能是一个特定的Java Bean,用于封装Map的键值对,提供更面向...

    java实现Object和Map之间的转换3种方式

    Java 实现 Object 和 Map 之间的转换 3 种方式 Java 中,Object 和 Map 是 two kinds of data types 经常需要相互转换的数据类型。以下将介绍 Java 实现 Object 和 Map 之间的转换的 3 种方式。 方式一:使用 ...

    基于Java反射的map自动装配JavaBean工具类设计示例代码

    标签 :"java map bean javabean 和 map java map to bean" 在上面的代码中,我们使用 Java 反射机制获取了 JavaBean 对象的所有字段信息,然后将这些字段信息与 Map 对象的键值对进行匹配,并将匹配的结果设置到 ...

    java中实现map与对象相互转换的几种实现

    Java中实现Map与对象相互转换是许多开发者经常遇到的问题,本文将介绍五种实现Map与对象相互转换的方法,每种方法都将通过示例代码进行详细的介绍。 方法一:使用org.apache.commons.beanutils转换 该方法使用org....

    Desktop_javaBean转换Map工具_

    描述中提到的“直接实现Bean转换为Map,方便快捷,粘贴即用”,意味着这个工具或代码段提供了简单的API,可以快速集成到项目中,无需复杂的配置或额外的库依赖。这通常涉及到自定义转换器或者利用现有的库如Apache ...

    Map 转为Object Object 转为 Map java jdk1.4以上

    总结,Java反射机制提供了动态访问和修改对象的能力,使得在Map和Object之间进行转换成为可能。然而,这种转换方式有一定的局限性,例如无法处理私有字段、枚举、接口、泛型等复杂情况。在实际开发中,考虑到性能和...

    浅谈对象与Map相互转化

    浅谈对象与Map相互转化 在 Java 开发中,对象与 Map 的相互转换是非常常见的需求。例如,在 Web 项目中,我们需要将 Java 对象转换为 JSON 数据,以便于前端 JavaScript 代码对其进行处理。又或者,在数据处理时,...

    Java代码实现Map和Object互转及Map和Json互转

    在Java开发中,常常需要在Map和对象之间,以及Map和JSON之间进行转换。这样的转换在处理Web请求、数据存储和传输时非常常见。Java本身并没有提供直接的转换机制,但通过一些第三方库或反射机制,我们可以实现这些...

    mapstruct:用于生成类型安全的bean映射器的注释处理器

    该生成器具有合理的默认值和许多内置的类型转换,但是在配置或实现特殊行为时,它会自动退出。 与在运行时工作的映射框架相比,MapStruct具有以下优点: 通过使用普通方法调用而不是反射来快速执行编译时类型安全。...

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

    在给定的代码片段中,展示了如何自定义一个方法将Bean转换为DBObject。这个方法遍历了给定Bean的所有字段,并根据字段类型将它们的值放入一个新的DBObject中。这里有一个简化的版本: ```java import java.lang....

    Java基础将Bean属性值放入Map中的实例

    Java基础将Bean属性值放入Map中的实例是指将Java对象的属性值以属性名称为键,存储到Map中的简单实现。该实现包括自身属性及从父类继承得到的属性。 Java类型的getField[s]方法只能获取public类型的属性,而...

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

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

Global site tag (gtag.js) - Google Analytics