| | |
| | | package com.ruoyi.common.utils;
|
| | |
|
| | | import java.lang.reflect.Field;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Collection;
|
| | | import java.util.HashSet;
|
| | |
| | | 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.");
|
| | | }
|
| | | } |