初衷:
db返回了一個實體類,想封裝成一個Map留着按需獲取屬性,所以就有了下面的Utils
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
/**
* @program: ht
* @description: 實體類存入Map
* @author: Wangly
* @create: 2020-12-29 13:29
* @version: 1.0.0
*/
public class BeanMap {
/**
* 獲取obj中的所有方法
*
* @param obj
* @return
*/
public List<Method> getAllMethods(Object obj) {
List<Method> methods = new ArrayList<Method>();
// 獲取obj字節碼
Class<?> clazz = obj.getClass();
while (!clazz.getName().equals("java.lang.Object"))
{
// 獲取方法
methods.addAll(Arrays.asList(clazz.getDeclaredMethods()));
clazz = clazz.getSuperclass();
}
return methods;
}
/**
* 將一個類用屬性名為Key,值為Value的方式存入map
*
* @param obj
* @return
*/
public Map<String, Object> convert2Map(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
List<Method> methods = getAllMethods(obj);
for (Method m : methods) {
String methodName = m.getName();
if (methodName.startsWith("get")) {
// 獲取屬性名
String propertyName = methodName.substring(3);
try {
map.put(propertyName, m.invoke(obj));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return map;
}
}
Test
測試實體類
import lombok.Data;
/**
* @program: ht
* @description: TestBeanMap
* @author: Wangly
* @create: 2020-12-29 13:37
* @version: 1.0.0
*/
@Data
public class Person {
private int id;
private String name;
private String nipples;
private String sw;
private String bra;
private String foot;
private String mouth;
public Person() {}
public Person(int id, String name, String nipples, String sw, String bra, String foot, String mouth) {
this.id = id;
this.name = name;
this.nipples = nipples;
this.sw = sw;
this.bra = bra;
this.foot = foot;
this.mouth = mouth;
}
}
測試類
@Test
public void BeanMapTest() {
BeanMap beanMap = new BeanMap();
Person p = new Person();
p.setId(1);
p.setBra("pink");
p.setMouth("good");
p.setNipples("pink");
p.setSw("black");
p.setFoot("good");
Map<String, Object> stringObjectMap = beanMap.convert2Map(p);
stringObjectMap.forEach((k, v) -> {
System.out.println("k:" + k + ",v:" + v);
});
}
輸出

發現多少沾點多此一舉 避免重復造輪子
// 將 Map 轉換為 實體類
Person person = JSON.parseObject(JSON.toJSONString(personMap), person.class);
System.out.println(user);
// 將 實體類 轉換為 Map
Map map = JSON.parseObject(JSON.toJSONString(person), Map.class);
System.out.println(map);
