`
huttoncs
  • 浏览: 198984 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javaBean与Map互转的工具类

    博客分类:
  • java
 
阅读更多

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.cpic.caf.cili.trans.model.PolicInfo;

/**
 *
 * BEAN、MAP互转工具类<br>
 *
 * 当把Person类作为BeanToMapUtils的内部类时,程序出错<br>
 * java.lang.NoSuchMethodException: Property '**' has no setter method<br>
 * 本质:内部类 和 单独文件中的类的区别 <br>
 * BeanUtils.populate方法的限制:<br>
 * The class must be public, and provide a public constructor that accepts no arguments. <br>
 * This allows tools and applications to dynamically create new instances of your bean, <br>
 * without necessarily knowing what Java class name will be used ahead of time
 */
public class BeanToMapUtils {
 private static Logger log = LoggerFactory.getLogger(BeanToMapUtils.class);
 
    public static void main(String[] args) {

        /*PersonBean person = new PersonBean();
        Map<String, Object> mp = new HashMap<String, Object>();
        mp.put("name", "Mike");
        mp.put("age", 25);
        mp.put("mN", "male");

        // 将map转换为bean
        transMap2Bean2(mp, person);

        System.out.println("--- transMap2Bean Map Info: ");
        for (Map.Entry<String, Object> entry : mp.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        System.out.println("--- Bean Info: ");
        System.out.println("name: " + person.getName());
        System.out.println("age: " + person.getAge());
        System.out.println("mN: " + person.getmN());*/
     
       }

    // Map --> Bean 2: 利用org.apache.commons.beanutils 工具类实现 Map --> Bean
    public static void transMap2Bean2(Map<String, Object> map, Object obj) {
        if (map == null || obj == null) {
            return;
        }
        try {
            BeanUtils.populate(obj, map);
        } catch (Exception e) {
         log.error("transMap2Bean2 Error ",e);
        }
    }

    // Map --> Bean 1: 利用Introspector,PropertyDescriptor实现 Map --> Bean
    public static void transMap2Bean(Map<String, Object> map, Object obj) {

        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();

                if (map.containsKey(key)) {
                    Object value = map.get(key);
                    // 得到property对应的setter方法
                    Method setter = property.getWriteMethod();
                    setter.invoke(obj, value);
                }

            }

        } catch (Exception e) {
         log.error("transMap2Bean Error ",e);
        }

        return;

    }

    // Bean --> Map 1: 利用Introspector和PropertyDescriptor 将Bean --> Map
    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) {
         log.error("transBean2Map Error " ,e);
        }

        return map;

    }
}

分享到:
评论

相关推荐

    Bean与Map转换工具类BeanMapConverter.java

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

    将list转换成JavaBean

    将list&lt;Map&gt;转换成JavaBean的工具类

    对象与map互相转换工具类

    对象与map互相转换工具类

    List<Map>转化为List工具类

    一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List&lt;Map, Object&gt;&gt;结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后...此工程中就是解决List&lt;Map, Object&gt;&gt;转化为JavaBean工具类实现

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第12版)

    于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持...

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

    主要介绍了Javabean和map相互转化方法示例,介绍了其通用方法代码,需要的朋友可以参考下。

    xml和java bean互相转换工具包(简单易用)

    xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...

    xml生成javabean工具

    在已经有xml的情况下,快速生成javabean代码,不需要自己再手打大量无聊的代码。

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

    主要给大家介绍了关于基于Java反射的map自动装配JavaBean工具类设计的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起看看吧

    自定义java常见工具类

    java开发中常用的工具类 比如 1:hibernate的配置 工具类复写 2:字符串加密 MD5加密 3:javabean到map的自动映射封装 4:javabean java对象到xml的自动封装 5:各种日期格式的处理 6:json的自动封装处理 7:...

    java写的几种方便web开发工具类源码

    工具类里面有关于java bean 转map map转Javabean 可以支持日期类型转换。关于发邮件可见附件工具类,验证码工具类 编码过滤工具类 加密解密工具类,用c3po连接数据库的

    java_android_javaBean json转换工具类的标准代码

    一些工具类代码块的标准代码,包括但不限于: javaBean、列表数组转换为json字符串 javaBean、列表数组转换为json字符串,忽略空值 json 转JavaBean json字符串转换为map 深度转换json成map 把json解析成list,如果...

    通过fastjson实现各种格式与json之间的转换

    通过fastjson实现了JavaBean,list&lt;JavaBean&gt;,MAP,list等格式与json格式之间的转换,已经附带fastjson的包,包的版本为fastjson-1.1.36.jar

    Java连接数据库 JDBC封装类 带使用例子

    Java JDBC封装类,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。

    廖雪峰 Java 教程.doc

    常用工具类 异常处理 Java的异常 捕获异常 抛出异常 自定义异常 使用断言 使用JDK Logging 使用Commons Logging 使用Log4j 使用SLF4J和Logback 反射 Class类 访问字段 调用方法 调用构造方法 获取...

    java基础案例与开发详解案例源码全

    12.5.2 使用集合工具类同步化集合类对象324 12.5.3 使用JDK5.0后提供的并发集合类324 12.6 用Timer类调度任务325 12.7 本章练习326 第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 76 实例061 格式化当前日期 77 实例062 货币金额大写格式 78 实例063 String类格式化...

Global site tag (gtag.js) - Google Analytics