java bean to map_javabean对象和map互相转换

介绍一个 JavaBean转Map 和 Map转JavaBean 的工具类。

UserBean.java。定义java bean类package com.weizhixi.test;

public class UserBean {

private Integer id;

private String name;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

MapUtil.java,Map工具类package com.weizhixi.test;

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;

/**

* Map Bean转换工具

* Created by cxq on 2018/1/5.

*/

public class MapUtil {

/**

* Map转换成JavaBean.

* @param type JavaBean的Class

* @param map map

* @return 转换的JavaBean

* @throws IntrospectionException 无法获取类字段

* @throws IllegalAccessException JavaBean无法被实例化

* @throws InstantiationException JavaBean无法被实例化

* @throws InvocationTargetException 调用方法失败

*/

public static final Object toBean(Class> type, Map map) throws IntrospectionException, IllegalAccessException,  InstantiationException, InvocationTargetException {

//获取JavaBean其所有属性、公开的方法和事件

BeanInfo beanInfo = Introspector.getBeanInfo(type);

//实例化JavaBean对象

Object obj = type.newInstance();

//获取属性数组

PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

for (int i = 0; i

//取出一个属性

PropertyDescriptor descriptor = propertyDescriptors[i];

//获取属性名称

String propertyName = descriptor.getName();

//判断属性是否存在于map

if (map.containsKey(propertyName)) {

//获取属性对应值

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 调用方法失败

*/

public static final Map toMap(Object bean) throws IntrospectionException, IllegalAccessException, InvocationTargetException {

//定义Map对象

Map returnMap = new HashMap();

//获取JavaBean其所有属性、公开的方法和事件

BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());

//获取属性数组

PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

for (int i = 0; i

//取出一个属性

PropertyDescriptor descriptor = propertyDescriptors[i];

//获取属性名称

String propertyName = descriptor.getName();

//过滤class

if (!propertyName.equals("class")) {

//获取属性方法,用于读取属性值的方法

Method readMethod = descriptor.getReadMethod();

//调用方法返回当前属性值

Object result = readMethod.invoke(bean, new Object[0]);

if (result != null) {

//将属性名称和属性对应值放入map

returnMap.put(propertyName, result);

} else {

//如果无值,默认为空字符串

returnMap.put(propertyName, "");

}

}

}

return returnMap;

}

}

调用示例:public static void main(String[] args) throws Exception{

Map objectMap = new HashMap();

objectMap.put("id",1);

objectMap.put("name","张三");

//Map转JavaBean

UserBean userBean = (UserBean)toBean(UserBean.class, objectMap);

System.out.println(userBean.getId());

System.out.println(userBean.getName());

//1

//张三

//JavaBean转Map

System.out.println(toMap(userBean));

//{id=1, name=张三}

}

相关介绍:

IntrospectionException

无法将字符串类名称映射到 Class 对象、无法解析字符串方法名,或者指定对其用途而言具有错误类型签名的方法名称。

IllegalAccessException

当应用程序试图反射性地创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时,抛出抛出该异常。

InstantiationException

当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常。实例化失败有很多原因,包括但不仅限于以下原因:

1、类对象表示一个抽象类、接口、数组类、基本类型、void

2、类没有非 null 构造方法

InvocationTargetException

调用方法或构造方法所抛出异常的经过检查的异常。

原创文章,转载请注明出处:https://www.weizhixi.com/article/51.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值