/*** 是否为一个用户标准bean,不考虑泛型情况*/private static boolean isBean(Class<?> clazz) {if (clazz.equals(String.class) || ClassUtil.isBasicType(clazz)) {return false;}if (clazz.isArray() && ClassUtil.isSimpleValueType(clazz.getComponentType())) {return false;}//Map.class.isAssignableFrom(clazz) 继承时为true, Collection.class.isAssignableFrom(clazz) 继承时为truereturn !Collection.class.isAssignableFrom(clazz) && !Map.class.isAssignableFrom(clazz);}
/*** 提取自定义引用bean*/private static void getAllParameter(Type type, List<Class<?>> list) {Class<?> c1 = TypeUtil.getClass(type);if (type instanceof ParameterizedType) {if (isBean(c1) && !list.contains(c1)) {list.add(c1);}Type[] ts = ((ParameterizedType) type).getActualTypeArguments();for (Type tp : ts) {getAllParameter(tp, list);}} else {if (isBean(c1) && !list.contains(c1)) {list.add(c1);}}}
@Testpublic void test() {for (Field field : Primitive.class.getDeclaredFields()) {System.out.print(field.getName() + ": ");Class<?> fieldClazz = field.getType();Type fieldType = field.getGenericType();//枚举if (fieldClazz.isEnum()) {System.out.println("枚举类型");continue;}//stringif (fieldClazz.equals(String.class)) {System.out.println("String 类型");continue;}//基本数据类型if (ClassUtil.isBasicType(fieldClazz)) {System.out.println("基本数据类型");continue;}//数组if (fieldClazz.isArray()) {//基本数组if (ClassUtil.isSimpleValueType(fieldClazz.getComponentType())) {System.out.println("基本数组");continue;}System.out.println("引用数组");continue;}//是否为单列集合ArrayList<Class<?>> list = new ArrayList<>();getAllParameter(fieldType, list);if (Collection.class.isAssignableFrom(fieldClazz)) {if (CollUtil.isEmpty(list)) {System.out.println("简单单列");continue;}//引用单列System.out.println("引用单列");list.forEach(System.out::println);continue;}//是否为双列集合if (Map.class.isAssignableFrom(fieldClazz)) {if (CollUtil.isEmpty(list)) {System.out.println("简单双列");continue;}System.out.println("引用双列");list.forEach(System.out::println);}System.out.println("自定义bean");list.forEach(System.out::println);}}
package com.alipay.mychain.taas.apidoc;import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.TypeUtil;
import cn.hutool.db.PageResult;
import lombok.Data;
import org.junit.Test;
import org.springframework.http.RequestEntity;import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;class User {private String name;private Integer age;private List<Primitive> list;
}@Data
public class Primitive {private int inta;private Integer integera;private Double aDouble;private String Stringa;private User user;private List<User> List_User;private String[] strings;private User[] users;Map<String, List<User>> maps;private List<User> aa;private String[] listString;RequestEntity<Map<User, List<PageResult<User>>>> req;@Testpublic void test() {for (Field field : Primitive.class.getDeclaredFields()) {System.out.print(field.getName() + ": ");Class<?> fieldClazz = field.getType();Type fieldType = field.getGenericType();//枚举if (fieldClazz.isEnum()) {System.out.println("枚举类型");continue;}//stringif (fieldClazz.equals(String.class)) {System.out.println("String 类型");continue;}//基本数据类型if (ClassUtil.isBasicType(fieldClazz)) {System.out.println("基本数据类型");continue;}//数组if (fieldClazz.isArray()) {//基本数组if (ClassUtil.isSimpleValueType(fieldClazz.getComponentType())) {System.out.println("基本数组");continue;}System.out.println("引用数组");continue;}//是否为单列集合ArrayList<Class<?>> list = new ArrayList<>();getAllParameter(fieldType, list);if (Collection.class.isAssignableFrom(fieldClazz)) {if (CollUtil.isEmpty(list)) {System.out.println("简单单列");continue;}//引用单列System.out.println("引用单列");list.forEach(System.out::println);continue;}//是否为双列集合if (Map.class.isAssignableFrom(fieldClazz)) {if (CollUtil.isEmpty(list)) {System.out.println("简单双列");continue;}System.out.println("引用双列");list.forEach(System.out::println);}System.out.println("自定义bean");list.forEach(System.out::println);}}/*** 提取自定义引用bean*/private static void getAllParameter(Type type, List<Class<?>> list) {Class<?> c1 = TypeUtil.getClass(type);if (type instanceof ParameterizedType) {if (isBean(c1) && !list.contains(c1)) {list.add(c1);}Type[] ts = ((ParameterizedType) type).getActualTypeArguments();for (Type tp : ts) {getAllParameter(tp, list);}} else {if (isBean(c1) && !list.contains(c1)) {list.add(c1);}}}/*** 是否为一个用户标准bean,不考虑泛型情况*/private static boolean isBean(Class<?> clazz) {if (clazz.equals(String.class) || ClassUtil.isBasicType(clazz)) {return false;}if (clazz.isArray() && ClassUtil.isSimpleValueType(clazz.getComponentType())) {return false;}//Map.class.isAssignableFrom(clazz) 继承时为true, Collection.class.isAssignableFrom(clazz) 继承时为truereturn !Collection.class.isAssignableFrom(clazz) && !Map.class.isAssignableFrom(clazz);}
}