buhuazhen
2026-05-21 342e5fa110cd2644c9cdd02ff7e56b331218c35c
src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -1,5 +1,6 @@
package com.ruoyi.common.utils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -761,4 +762,49 @@
            return sb.toString();
        }
    }
    public static void fillStringNull(Object obj) {
        if (obj == null) return;
        Class<?> clazz = obj.getClass();
        // 基本类型 / 包装类 / String 不处理
        if (clazz.isPrimitive() ||
                clazz == String.class ||
                Number.class.isAssignableFrom(clazz) ||
                clazz == Boolean.class ||
                clazz == Character.class) {
            return;
        }
        for (Field field : clazz.getDeclaredFields()) {
            field.setAccessible(true);
            try {
                Object value = field.get(obj);
                // 1️⃣ String 类型:null → ""
                if (field.getType() == String.class) {
                    if (value == null) {
                        field.set(obj, "");
                    }
                }
                // 2️⃣ List 递归处理
                else if (value instanceof List) {
                    for (Object item : (List<?>) value) {
                        fillStringNull(item);
                    }
                }
                // 3️⃣ 其他对象递归
                else if (value != null && !isJdkClass(value.getClass())) {
                    fillStringNull(value);
                }
            } catch (IllegalAccessException ignored) {}
        }
    }
    private static boolean isJdkClass(Class<?> clazz) {
        return clazz.getPackage() != null &&
                clazz.getPackage().getName().startsWith("java.");
    }
}