注:文章皆为个人纪录,可用性请以最终结果为准,若有错还请大佬们指出,谢谢!
工具作用:
JavaBean 与 Map 的互相转换
方式一:Hutool
步骤一:引入依赖
<hutool.util.version>5.6.6</hutool.util.version> <!-- hutool -->
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.util.version}</version>
</dependency>
步骤二:调用方式
package cn.hutool.core.bean 包下的 BeanUtil
![](https://i-blog.csdnimg.cn/blog_migrate/e613b319a83f10e79559e2fe04ad1c8a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/db68a87ad3b33c062db3e50731b4ab3c.png)
方式二:自己封装工具类
package com.paycool.inpay.core.utils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: JavaBean 与 Map 的互相转换
*
* @Date: 2021/11/17
* @Author: jiangXueZhi
*/
public class BeanMapUtils {
/**
* JavaBean 转为 Map
*
* @param bean JavaBean
* @return Map<String,Object>
*/
public static Map<String, Object> beanToMap(Object bean) {
if (bean == null) {
return null;
} else {
HashMap<String, Object> hashMap = new HashMap<>();
try {
Class<?> c = bean.getClass();
Method[] methods = c.getMethods();
for (Method method : methods) {
String name = method.getName();
String key = "";
if (name.startsWith("get")) {
key = name.substring(3);
}
if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0) {
if (key.length() == 1) {
key = key.toLowerCase();
} else if (!Character.isUpperCase(key.charAt(1))) {
key = key.substring(0, 1).toLowerCase() + key.substring(1);
}
if (!"class".equals(key.toLowerCase())) {
Object value = method.invoke(bean);
if (value != null) {
hashMap.put(key, value);
}
}
}
}
} catch (Throwable var9) {
var9.printStackTrace();
}
return hashMap;
}
}
/**
* 把 Map<String,Object> 转为 JavaBean
*
* @param map Map<String,Object>
* @param clazz class 反射对象
* @param <T> 泛型
* @return JavaBean
*/
public static <T> T mapToBean(Class<T> clazz, Map<String, Object> map) {
T bean = null;
try {
bean = clazz.newInstance();
for (Map.Entry<String, Object> stringObjectEntry : map.entrySet()) {
String key = stringObjectEntry.getKey();
Object value = stringObjectEntry.getValue();
// 去这个类及其父类递归找到这个属性
Field field = getClassField(clazz, key);
if (field != null) {
// 获取属性的set方法
String methodName = "set" + key.substring(0, 1).toUpperCase() + key.substring(1);
Method method = clazz.getMethod(methodName, field.getType());
method.invoke(bean, value);
}
}
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
e.printStackTrace();
}
return bean;
}
private static Field getClassField(Class<?> clazz, String fieldName) {
Field[] declaredFields = clazz.getDeclaredFields();
for (Field declaredField : declaredFields) {
if (declaredField.getName().equals(fieldName)) {
return declaredField;
}
}
// 如果找不到对应属性。递归去父类找
Class<?> superclass = clazz.getSuperclass();
if (null != superclass) {
return getClassField(superclass, fieldName);
}
return null;
}
}