|
@@ -1,7 +1,10 @@
|
|
|
package com.backendsys.utils;
|
|
|
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
import org.springframework.cglib.beans.BeanMap;
|
|
|
|
|
|
+import java.lang.reflect.Field;
|
|
|
import java.util.*;
|
|
|
|
|
|
public class MapUtil {
|
|
@@ -58,6 +61,98 @@ public class MapUtil {
|
|
|
return newMap;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 将 实体类字段命名 转换为 首字母小写的 小驼峰命名
|
|
|
+ * JSONObject demoJSON = MapUtil.convertEntityToJson(demoDTO);
|
|
|
+ */
|
|
|
+ public static JSONObject convertEntityToJson(Object entity) throws IllegalAccessException {
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
+ Class<?> clazz = entity.getClass();
|
|
|
+ // 遍历实体类的所有字段
|
|
|
+ for (Field field : clazz.getDeclaredFields()) {
|
|
|
+ field.setAccessible(true); // 确保可以访问私有字段
|
|
|
+ // 获取字段名,并转换为小驼峰命名法
|
|
|
+ String fieldName = convertToCamelCase(field.getName());
|
|
|
+ Object fieldValue = field.get(entity);
|
|
|
+ if (fieldValue != null) {
|
|
|
+ if (List.class.isAssignableFrom(field.getType())) {
|
|
|
+ // 字段是List类型
|
|
|
+ List<?> list = (List<?>) fieldValue;
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
+ for (Object item : list) {
|
|
|
+ if (item instanceof Object) {
|
|
|
+ // 如果列表项是实体类对象,则递归转换
|
|
|
+ jsonArray.put(convertEntityToJson(item));
|
|
|
+ } else {
|
|
|
+ // 否则直接添加到数组中
|
|
|
+ jsonArray.put(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ json.put(fieldName, jsonArray);
|
|
|
+ } else if (Map.class.isAssignableFrom(field.getType())) {
|
|
|
+ // 字段是Map类型
|
|
|
+ Map<?, ?> map = (Map<?, ?>) fieldValue;
|
|
|
+ JSONObject jsonMap = new JSONObject();
|
|
|
+ for (Map.Entry<?, ?> entry : map.entrySet()) {
|
|
|
+ Object key = entry.getKey();
|
|
|
+ Object value = entry.getValue();
|
|
|
+ if (value instanceof Object) {
|
|
|
+ // 如果Map的值是实体类对象,则递归转换
|
|
|
+ jsonMap.put(key.toString(), convertEntityToJson(value));
|
|
|
+ } else {
|
|
|
+ // 否则直接添加到Map中
|
|
|
+ jsonMap.put(key.toString(), value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ json.put(fieldName, jsonMap);
|
|
|
+ } else if (
|
|
|
+ String.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Integer.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Double.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Float.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Long.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Short.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Byte.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Boolean.class.isAssignableFrom(field.getType()) ||
|
|
|
+ Character.class.isAssignableFrom(field.getType())
|
|
|
+ ) {
|
|
|
+ // 判断不了实体类,只能判断上面的通用类型,适合类型的直接输出
|
|
|
+ json.put(fieldName, fieldValue);
|
|
|
+ } else {
|
|
|
+ // 无法识别实体类类型 else if (field.getType().isAssignableFrom(Entity.class)
|
|
|
+ // 字段是实体类的实例,递归转换
|
|
|
+ json.put(fieldName, convertEntityToJson(fieldValue));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return json;
|
|
|
+ }
|
|
|
+ // 将下划线命名法转换为小驼峰命名法
|
|
|
+ public static String convertToCamelCase(String name) {
|
|
|
+ if (name == null || name.isEmpty()) {
|
|
|
+ return name;
|
|
|
+ }
|
|
|
+ StringBuilder result = new StringBuilder();
|
|
|
+ boolean nextUpper = false;
|
|
|
+ for (int i = 0; i < name.length(); i++) {
|
|
|
+ char c = name.charAt(i);
|
|
|
+ if (c == '_') {
|
|
|
+ nextUpper = true;
|
|
|
+ } else {
|
|
|
+ if (nextUpper) {
|
|
|
+ result.append(Character.toUpperCase(c));
|
|
|
+ nextUpper = false;
|
|
|
+ } else {
|
|
|
+ result.append(Character.toLowerCase(c));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 将对象装换为map
|
|
|
* @param bean
|