Quellcode durchsuchen

Add MapUtil convertEntityToJson

tsurumure vor 1 Jahr
Ursprung
Commit
590d0fe441
1 geänderte Dateien mit 95 neuen und 0 gelöschten Zeilen
  1. 95 0
      src/main/java/com/backendsys/utils/MapUtil.java

+ 95 - 0
src/main/java/com/backendsys/utils/MapUtil.java

@@ -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