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

[java]HashMap与Bean互转

 
阅读更多
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * HashMap与Bean互转工具类
 * 
 * @author hailan
 * @time 2015-10-12下午05:56:34
 */
public class HashMapBeanTools {
	
	/**
	 * HashMap转换成JavaBean
	 * 
	 * @author hailan
	 * @time 下午05:57:16
	 * @param map
	 * @param cls
	 * @return
	 */
	public static Object hashMapToJavaBean(HashMap<?,?> map, Class<?> cls) {
		Object obj = null;
		try {
			obj = cls.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 取出bean里的所有方法
		Method[] methods = cls.getMethods();
		for (int i = 0; i < methods.length; i++) {
			// 取方法名
			String method = methods[i].getName();
			// 取出方法的类型
			Class<?>[] cc = methods[i].getParameterTypes();
			if (cc.length != 1)
				continue;

			// 如果方法名没有以set开头的则退出本次for
			if (!method.startsWith("set") )
				continue;
			// 类型
			String type = cc[0].getSimpleName();

			try {
				//
				Object value = method.substring(3,4).toLowerCase().concat(method.substring(4));
				// 如果map里有该key
				if (map.containsKey(value)) {
					// 调用其底层方法
					setValue(type, map.get(value), i, methods, obj);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return obj;
	}

	/**
	 * 调用底层方法设置值
	 * 
	 * @author hailan
	 * @time 下午06:01:56
	 * @param type
	 * @param value
	 * @param i
	 * @param method
	 * @param bean
	 * @throws Exception 
	 */
	private static void setValue(String type, Object value, int i, Method[] method,
			Object bean) throws Exception {
		if (value != null && !value.equals("")) {
			try {
				if (type.equals("String")) {
					// 第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
					method[i].invoke(bean, new Object[] { value });
				} else if (type.equals("int") || type.equals("Integer")) {
					method[i].invoke(bean, new Object[] { new Integer(""
							+ value) });
				} else if (type.equals("BigDecimal")) {
					method[i].invoke(bean, new Object[] { new BigDecimal((String)value) });
				} else if (type.equals("long") || type.equals("Long")) {
					method[i].invoke(bean,
							new Object[] { new Long("" + value) });
				} else if (type.equals("boolean") || type.equals("Boolean")) {
					method[i].invoke(bean, new Object[] { Boolean.valueOf(""
							+ value) });
				} else if (type.equals("Date")) {
					Date date = null;
					if (value.getClass().getName().equals("java.util.Date")) {
						date = (Date) value;
					} else {
						//根据文件内的格式不同修改,时间格式太多在此不做通用格式处理。
						if (value.toString().length() > 10){
							String format = "yyyy-MM-dd HHmmss";
							date = parseDateTime("" + value, format);
						} else if (value.toString().length() == 10){
							String format = "yyyy-MM-dd";
							date = parseDateTime("" + value, format);
						} else  if (value.toString().length() == 8){
							String format = "yyyyMMdd";
							date = parseDateTime("" + value, format);
						} else  if (value.toString().length() == 14){
							String format = "yyyyMMddHHmmss";
							date = parseDateTime("" + value, format);
						}else  if (value.toString().length() == 6){
							String format = "HHmmss";
							date = parseDateTime("" + value, format);
						}
					}
					if (date != null) {
						method[i].invoke(bean, new Object[] { date });
					}
				} else if (type.equals("byte[]")) {
					method[i].invoke(bean,
							new Object[] { new String(value + "").getBytes() });
				}
			} catch (Exception e) {
				e.printStackTrace();
				throw e;
			}
		}
	}

	/**
	 * 日期格式转换
	 * 
	 * @author hailan
	 * @time 下午06:02:59
	 * @param dateValue
	 * @param format
	 * @return
	 */
	private static Date parseDateTime(String dateValue, String format) {
		SimpleDateFormat obj = new SimpleDateFormat(format);
		try {
			return obj.parse(dateValue);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	
	public static Map<String, Object> hashJavaBeanToMap(Object ojt) {
		Class<?> cls = ojt.getClass();
		Field[] field = cls.getDeclaredFields();   
		  
        HashMap<String, Object> mapbean = new HashMap<String, Object>();   
        for(int i=0;i<field.length;i++){   
            Field f = field[i];   
            f.setAccessible(true);   
            try {   
            	mapbean.put(f.getName(), f.get(cls));   
            } catch (IllegalArgumentException e) {   
                e.printStackTrace();   
            } catch (IllegalAccessException e) {   
                e.printStackTrace();   
            }   
        }   
		return mapbean;   
    }   

	
}

分享到:
评论

相关推荐

    Bean与Map转换工具类BeanMapConverter.java

    Bean与MAP间互转换的工具类。 1.将一个 Map 对象转化为一个 JavaBean,可指定BEAN的类型; 2.将一个 JavaBean 对象转化为一个 HashMap;

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

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

    java bean和map之间的互转

    在Java编程中,Java Bean和Map是两种常用的...总的来说,Java Bean和Map之间的互转在Java开发中非常常见,尤其是在数据交换和视图渲染时。理解并掌握这两种数据结构的转换技巧,有助于提升开发效率和代码的可维护性。

    List转换为List

    本知识点重点讲解将List&lt;Bean&gt;转换为List的过程,这在进行Web开发、数据处理以及与前端交互等场景中非常常见。同时,也会涉及List转换为List及list转换为JsonArray的内容。 ### List&lt;Bean&gt;转换为List 在Java中,...

    java8 通用转echart方法

    在Java编程中,ECharts是一种基于JavaScript的...这个过程包括提取类别和系列数据、构建ECharts所需的JSON结构,并确保数据与ECharts的预期格式相匹配。这种方法具有一定的灵活性,能够适应不同的数据源和图表类型。

    JSON与JAVA数据的转换

    ### JSON与JAVA数据的转换 在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端交互、配置文件存储等场景。而在Java编程语言中,处理JSON数据通常涉及到将JSON...

    Java海量数据分页Bean

    Java海量数据分页Bean, 适用于Oracle(适当修改,适用于任何数据库).功能描述:传入到达页码(具有容错性)、每页记录数、Select查询语句,返回该页所有的记录(整页是List集合,每条记录是一个 HashMap)、总行数、总...

    详解json string转换为java bean及实例代码.docx

    在进行 JSON 数据与 Java Bean 的转换之前,我们需要准备一些必要的工具库。常用的库有 Jackson 和 Fastjson,它们都提供了强大的功能来支持 JSON 的序列化和反序列化。 ##### 添加依赖 在 Maven 项目的 `pom.xml`...

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

    在Java中,我们可以使用JAXB(Java Architecture for XML Binding)进行XML与Java对象之间的双向绑定,或者使用DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等API来...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    在Java开发中,处理JSON数据是一项常见的任务,特别是在与服务器进行数据交互时。本文将详细介绍如何将JSON字符串直接转换为Java对象,特别是涉及到多层List集合的情况。在本例中,我们将使用`...

    java对象与json对象的转换.pdf

    本文将详细介绍如何使用JSON-lib库进行Java对象与JSON对象之间的转换。 首先,为了进行这些转换,我们需要引入JSON-lib库以及其依赖的第三方包,如Apache Commons、oro、ezmorph和nu.xom。可以从以下地址下载JSON-...

    spring xml配置的12個技巧

    Spring框架是Java领域里一个非常重要的开源框架,它提供了一整套的解决方案,让Java应用的开发变得更为高效和方便。Spring框架的核心特性之一就是依赖注入(DI)和控制反转(IoC),而这些功能主要是通过XML配置文件...

    java7hashmap源码-java-note:笔记

    hashmap源码 java-notes 算法 数据结构 设计模式 基础 集合 ConcurrentHashMap IO 并发 [Java 并发]( 并发.md) AQS 源码 JVM web 基础 [NGINX 简介](./docs/nginx/NGINX 简介.md) 框架 Spring [观察 Spring bean ...

    java对象与json对象的转换

    Bean对象转换涉及到Java类与JSON对象的映射。JSON-lib支持转换具有公共属性的Java类实例。在给出的Java代码中,`JsonBean`类包含了一些字段,如字符串、整数、字符数组、函数表示字符串以及JSONFunction对象。`...

    java对象与json对象的转换[借鉴].pdf

    以下是基于JSON-lib的Java对象与JSON对象转换的一些基本示例。 1. **List转换** 以下代码展示了如何将Java的`List`转换为JSON数组: ```java List&lt;String&gt; list = new ArrayList(); list.add("first"); list....

    使用json-lib将java对象转换成json字符串

    1. **JSON与Java对象的互转**: - JSON对象可以映射为Java对象,如HashMap、ArrayList等。JSON字符串到Java对象的转换通常通过反序列化实现,而Java对象到JSON字符串的转换则称为序列化。 - json-lib库提供了一套...

    mi-yi-collection-bean-master_java_源码

    【标题】"mi-yi-collection-bean-master_java_源码" 涉及的主要知识点是Java集合框架中的Bean类和其在实际项目中的应用。这个压缩包可能包含了一个Java项目,其中的核心部分是对集合对象(如List、Set、Map等)进行...

    json与bean,array,list,map,简单类型之间的封装、解析

    本主题主要探讨的是如何使用Gson库处理JSON数据与Java中的Bean、Array、List、Map以及简单类型的相互转换。 首先,我们来看JSON与Java Bean之间的转换。Java Bean是一种具有特定属性和方法的对象,它们通常用来封装...

Global site tag (gtag.js) - Google Analytics