方法一 fastjson 转换

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.46.sec01</version>
</dependency>
/*** 将Map转换为对象* @param paramMap* @param cls* @return*/
public static <T> T parseMap2Object(Map<String, Object> paramMap, Class<T> cls) {// return JSON.parseObject(JSON.toJSONString(Map<String, ? extends Object>), Class<T> cls);return JSONObject.parseObject(JSONObject.toJSONString(paramMap), cls);
}

方法二 BeanUtils转换

BeanUtils.populate(Object bean, Map<String, ? extends Object> properties)
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    if (map == null)  return null;  Object obj = beanClass.newInstance();  org.apache.commons.beanutils.BeanUtils.populate(obj, map);  return obj;
}    public static Map<?, ?> objectToMap(Object obj) {  if(obj == null)  return null;   return new org.apache.commons.beanutils.BeanMap(obj);
}

方法三 Introspector转换

public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    if (map == null)   return null;    Object obj = beanClass.newInstance();  BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();    for (PropertyDescriptor property : propertyDescriptors) {  Method setter = property.getWriteMethod();    if (setter != null) {  setter.invoke(obj, map.get(property.getName()));   }  }  return obj;
}    public static Map<String, Object> objectToMap(Object obj) throws Exception {    if(obj == null)  return null;      Map<String, Object> map = new HashMap<String, Object>();   BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();    for (PropertyDescriptor property : propertyDescriptors) {    String key = property.getName();    if (key.compareToIgnoreCase("class") == 0) {   continue;  }  Method getter = property.getReadMethod();  Object value = getter!=null ? getter.invoke(obj) : null;  map.put(key, value);  }    return map;
}

方法四 reflect 转换

public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    if (map == null)  return null;    Object obj = beanClass.newInstance();  Field[] fields = obj.getClass().getDeclaredFields();   for (Field field : fields) {    int mod = field.getModifiers();    if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){    continue;    }    field.setAccessible(true);    field.set(obj, map.get(field.getName()));   }   return obj;
}    public static Map<String, Object> objectToMap(Object obj) throws Exception {    if(obj == null){    return null;    }   Map<String, Object> map = new HashMap<String, Object>();    Field[] declaredFields = obj.getClass().getDeclaredFields();    for (Field field : declaredFields) {    field.setAccessible(true);  map.put(field.getName(), field.get(obj));  }    return map;
}
/*** 利用反射将map集合封装成bean对象* * @param params* @param clazz* @return*/
public static <T> T mapToBean(Map<String, Object> map, Class<?> clazz) throws Exception {Object obj = clazz.newInstance();if (map != null && !map.isEmpty() && map.size() > 0) {for (Map.Entry<String, Object> entry : map.entrySet()) {String propertyName = entry.getKey();     // 属性名Object value = entry.getValue();     // 属性值String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);Field field = getClassField(clazz, propertyName); //获取和map的key匹配的属性名称if (field == null){continue;}Class<?> fieldTypeClass = field.getType();value = convertValType(value, fieldTypeClass);try {clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);} catch (NoSuchMethodException e) {e.printStackTrace();}}}return (T) obj;
}/*** 根据给定对象类匹配对象中的特定字段* @param clazz* @param fieldName* @return*/
private static Field getClassField(Class<?> clazz, String fieldName) {if (Object.class.getName().equals(clazz.getName())) {return null;}Field[] declaredFields = clazz.getDeclaredFields();for (Field field : declaredFields) {if (field.getName().equals(fieldName)) {return field;}}Class<?> superClass = clazz.getSuperclass();    //如果该类还有父类,将父类对象中的字段也取出if (superClass != null) {                        //递归获取return getClassField(superClass, fieldName);}return null;
}/*** 将map的value值转为实体类中字段类型匹配的方法* @param value* @param fieldTypeClass* @return*/
private static Object convertValType(Object value, Class<?> fieldTypeClass) {Object retVal = null;if (Long.class.getName().equals(fieldTypeClass.getName())|| long.class.getName().equals(fieldTypeClass.getName())) {retVal = Long.parseLong(value.toString());} else if (Integer.class.getName().equals(fieldTypeClass.getName())|| int.class.getName().equals(fieldTypeClass.getName())) {retVal = Integer.parseInt(value.toString());} else if (Float.class.getName().equals(fieldTypeClass.getName())|| float.class.getName().equals(fieldTypeClass.getName())) {retVal = Float.parseFloat(value.toString());} else if (Double.class.getName().equals(fieldTypeClass.getName())|| double.class.getName().equals(fieldTypeClass.getName())) {retVal = Double.parseDouble(value.toString());} else {retVal = value;}return retVal;
}/*** 对象转map* @param obj* @return*/
private static Map<String, Object> objToMap(Object obj) {Map<String, Object> map = new HashMap<String, Object>();Field[] fields = obj.getClass().getDeclaredFields();   // 获取f对象对应类中的所有属性域for (int i = 0, len = fields.length; i < len; i++) {String varName = fields[i].getName();varName = varName.toLowerCase();                    // 将key置为小写,默认为对象的属性try {boolean accessFlag = fields[i].isAccessible(); // 获取原来的访问控制权限fields[i].setAccessible(true);                    // 修改访问控制权限Object o = fields[i].get(obj);                  // 获取在对象f中属性fields[i]对应的对象中的变量if (o != null){map.put(varName, o.toString());}fields[i].setAccessible(accessFlag);          // 恢复访问控制权限} catch (IllegalArgumentException ex) {ex.printStackTrace();} catch (IllegalAccessException ex) {ex.printStackTrace();}}return map;
}

Map对象与实体类Object对象转换相关推荐

  1. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    JS中集合对象(Array.Map.Set)及类数组对象的使用与对比 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java ...

  2. 简单介绍实体类或对象序列化时,忽略为空属性的操作

    这篇文章主要介绍了实体类或对象序列化时,忽略为空属性的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 第一种,在配置文件配置 在application.xml直接 ...

  3. 在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable。

      在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable. ...

  4. java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用

    java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用 七十年代,IBM的Smalltalk语言最先推广面向对象,后来C语言变为C++,后来C++又产生了J ...

  5. 面对对象+面对过程+类与对象+this关键字+构造方法及重载+面对对象练习

    面对对象概述: 类与对象2.构造方法3.访问权限4.继承5.多态(最重要)6.抽象和接口7.内存分析 面向对象与面向过程区别: 面向过程:侧重的是过程. 优点:简单.缺点:代码量过大后难以维护. 面向 ...

  6. android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...

    Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者 ...

  7. Java通过Fastjson实现JSONObject对象、Json字符串以及Java实体类之间互相转换

    导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</arti ...

  8. 将远程服务器获取的linkedhashMap对象转为实体类对象

    微服务中从其他服务获取过来的对象,本来传的是实体类对象 , 但是接受到的参数却是linkedhashMap类型的对象 , 如果强转成自定义的实体类型会报错,因此可以利用ObjectMapper转换. ...

  9. JPA 一对一设置无效,连表查询的时候另外一个实体类的对象值为空

    文章目录 1.前言 2.错误示例: 3.正确示例 4.讲解 1.前言 今天在使用 JPA 的时候发现了这样一个问题,User 表和 OrganInfo 表配置了一对一关系,连表查询的时候只能够查到表 ...

最新文章

  1. 如何提升自己的Web前端技术
  2. Android--混淆打包找不到资源类的…
  3. C语言中const的用法
  4. bootstrap panel 和table的使用
  5. tomcat 、jsp、 servlet 、jstl版本对应
  6. git 提交文件_git原理与实战
  7. PHP笔记-平润年判断例子
  8. java选择安装路径的功能怎么实现_水槽怎么选择,从安装方式,材质功能,江水平给你一次性说清楚...
  9. The Largest Clique UVA - 11324( 强连通分量 + dp最长路)
  10. pytorch nn.MSELoss
  11. TypeScript算法专题 - blog2 - 单链表节点的索引、结点删除与链表反转
  12. ztree带有选项框的树形菜单使用
  13. VUE全局this指向
  14. 信息学奥赛一本通:1096:数字统计
  15. 日语中特殊汉字「髙」写入文件后乱码
  16. 车载网络测试 - 车载以太网 - ICMP详细解析
  17. 积木拼图游戏-儿童游戏免费拼图3-6岁
  18. 软考笔记——第七章--数据结构
  19. 求解两圆相交的交点坐标
  20. 基于智慧多功能灯杆的智慧道路(智慧公交)建设系统整体解决方案

热门文章

  1. CCF201609-1 最大波动(100分)
  2. ICPC程序设计题解书籍系列之一:刘汝佳:《算法竞赛入门经典》(第2版)
  3. xgboost 可视化与结果分析
  4. Topological Spaces(拓扑空间)
  5. 梦的解析 —— 梦知道答案
  6. 骗术 —— 魔高一尺道高一丈
  7. 强悍的 Linux —— 强悍的 find
  8. 面向项目(五)—— #pragma
  9. IPython notebook(Jupyter Notebook) 的使用
  10. Python debug —— invalid literal for int() with base 10