map与对象相互转换
工具类,不使用第三方依赖,纯反射实现
package com.qitai.maputil;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ObjectToMapUtil {
public static Map<String,Object> objectToMap(Object o) throws Exception {
Map<String,Object> objectMap = new HashMap<>();
Class oClass = o.getClass();
Field[] fields = oClass.getDeclaredFields();
List<String> fieldNames = new ArrayList<>();
for (Field field:fields){
String fieldName = field.getName();
fieldNames.add(fieldName);
PropertyDescriptor descriptor = new PropertyDescriptor(field.getName(), oClass);
Method method = descriptor.getReadMethod();
if ("class java.lang.String".equals(field.getType().toString())||
"int".equals(field.getType().toString())||
"class java.lang.Integer".equals(field.getType().toString())||
"class java.util.Date".equals(field.getType().toString())||
"class java.lang.Double".equals(field.getType().toString())||
"class java.lang.Boolean".equals(field.getType().toString())||
"class java.lang.Short".equals(field.getType().toString())) {
objectMap.put(fieldName,method.invoke(o));
}else {
objectMap.put(fieldName,objectToMap(method.invoke(o)));
}
}
return objectMap;
}
public static <T> T mapToObject(Class<T> tClass,Map<String,Object> map) throws Exception {
T t = tClass.newInstance();
Field[] fields = tClass.getDeclaredFields();
List<String> fieldNames = new ArrayList<>();
for (Field field:fields){
String fieldName = field.getName();
fieldNames.add(fieldName);
}
for (String key:map.keySet()){
if (fieldNames.contains(key)){
for (Field field:fields){
String fieldName = field.getName();
fieldNames.add(fieldName);
if (fieldName.equals(key)){
PropertyDescriptor descriptor = new PropertyDescriptor(field.getName(), tClass);
Method method = descriptor.getWriteMethod();
if (map.get(key) instanceof Map){
Class c1 = Class.forName(field.getType().toString().replace("class ",""));
method.invoke(t,mapToObject(c1,(Map<String, Object>) map.get(key)));
} else {
method.invoke(t,map.get(key));
}
}
}
}
}
return t;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南