场景 1:你已使用 HuTool(推荐!极简)
你代码里用了JSONUtil,说明项目已引入HuTool,这是最简单、无 bug的方案:
<!-- 你已有的HuTool依赖(无需额外加Gson) --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.16</version> </dependency>import cn.hutool.core.bean.BeanUtil; // 1. 转 Map<String, Object>(保留字段原始类型,最常用) Map<String, Object> map = BeanUtil.beanToMap(uploadBaseEntity); // 2. 转 Map<String, String>(所有值转字符串,兼容非String字段) Map<String, String> stringMap = BeanUtil.beanToMap(uploadBaseEntity, false, true);场景 2:仅使用 Gson(无 HuTool)
<!-- 配置gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.Map; Gson gson = new Gson(); // 直接转换:实体 → Map<String, Object>(无JSON字符串损耗) Map<String, Object> map = gson.fromJson(gson.toJson(uploadBaseEntity), new TypeToken<Map<String, Object>>() {}.getType());场景 3:无任何第三方依赖(纯 JDK 反射)
import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class MapUtils { /** * 实体类转Map<String, Object>(纯反射,无第三方依赖) * 支持:父类字段、任意字段类型、空值 */ public static Map<String, Object> objectToMap(Object obj) { if (obj == null) { return new HashMap<>(); } Map<String, Object> map = new HashMap<>(); Class<?> clazz = obj.getClass(); // 循环获取当前类+父类的所有字段 while (clazz != null && clazz != Object.class) { Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); try { map.put(field.getName(), field.get(obj)); } catch (IllegalAccessException e) { e.printStackTrace(); } } clazz = clazz.getSuperclass(); // 获取父类 } return map; } }