java中bean和map互相转换

为什么要bean和map互相转换?

做web开发,从request中获取表单参数,并且赋值给bean,操作起来太麻烦。。。

解决方法

用到apache的commons-beanutils包,由于commons-beanutils包要用到commons-logging,所以要先下载这两个jar包
下载地址:
http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi
http://commons.apache.org/proper/commons-logging/download_logging.cgi

bean转换map方法

Map map=BeanUtils.describe(object);

map转换bean方法

BeanUtils.populate(object, map);

完整代码

测试用的bean

public class Person {

    private String name;
    private int age;
    private double length;
    private Date birthday;

    private String nickname;

    private String info;

    public Person(){
        nickname="小名";
        info="只是属性";
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getLength() {
        return length;
    }
    public void setLength(double length) {
        this.length = length;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    private String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

}

转换类

public class Test {
    /**
     * 需要
     * commons-beanutils-1.9.3.jar
     * commons-logging-1.2.jar
     */
    public static void bean2map(){
        // TODO Auto-generated method stub
        Person p=new Person();
//        p.setName("哈哈");
        p.setAge(20);
        p.setBirthday(new Date());
        p.setLength(1.75);

        try {
            Map map=BeanUtils.describe(p);
            Iterator it=map.entrySet().iterator();
            while(it.hasNext()){
                Map.Entry en=(Map.Entry)it.next();
                System.out.println(en.getKey()+"=="+en.getValue());
            }
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * 需要
     * commons-beanutils-1.9.3.jar
     * commons-logging-1.2.jar
     * commons-collections-3.2.2.jar
     */
    public static void bean2map2(){
        // TODO Auto-generated method stub
        Person p=new Person();
//        p.setName("哈哈");
        p.setAge(20);
        p.setBirthday(new Date());
        p.setLength(1.75);

        Map map=new BeanMap(p);
        Iterator it=map.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry en=(Map.Entry)it.next();
            System.out.println(en.getKey()+"=="+en.getValue());
        }
    }
    public static void map2bean(){
        Map map=new HashMap();
        map.put("name", "java");
        map.put("age","17");
        map.put("length", "身高");
        map.put("birthday", new Date());
        Person p=new Person();
        try {
            BeanUtils.populate(p, map);
            String s=ReflectionToStringBuilder.toString(p);
            System.out.println(s);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        bean2map();
        bean2map2();
        map2bean();
    }

}