From af10986b450e3c8b1df026a69a9af356c6028b00 Mon Sep 17 00:00:00 2001 From: rays <1615175118@qq.com> Date: Wed, 23 Jun 2021 09:53:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=AB=E6=8F=8F=E6=97=B6?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=E7=88=B6=E7=B1=BB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scanner/api/util/ClassReflectUtil.java | 96 ++++++++++--------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/ClassReflectUtil.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/ClassReflectUtil.java index cef4d8fa4..2b60c19c5 100644 --- a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/ClassReflectUtil.java +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/ClassReflectUtil.java @@ -61,65 +61,71 @@ public class ClassReflectUtil { return fieldDescriptions; } - // 获取类中的所有字段 - Field[] declaredFields = ClassUtil.getDeclaredFields(clazz); + // 获取该类和该类所有父类的属性 + while (clazz != null){ + // 获取类中的所有字段 + Field[] declaredFields = ClassUtil.getDeclaredFields(clazz); - for (Field declaredField : declaredFields) { + for (Field declaredField : declaredFields) { - FieldMetadata fieldDescription = new FieldMetadata(); + FieldMetadata fieldDescription = new FieldMetadata(); - // 生成uuid,给前端用 - fieldDescription.setMetadataId(IdUtil.fastSimpleUUID()); + // 生成uuid,给前端用 + fieldDescription.setMetadataId(IdUtil.fastSimpleUUID()); - // 获取字段的名称 - String name = declaredField.getName(); - fieldDescription.setFieldName(name); + // 获取字段的名称 + String name = declaredField.getName(); + fieldDescription.setFieldName(name); - // 获取字段的类型 - Class declaredFieldType = declaredField.getType(); - fieldDescription.setFieldClassType(declaredFieldType.getSimpleName()); + // 获取字段的类型 + Class declaredFieldType = declaredField.getType(); + fieldDescription.setFieldClassType(declaredFieldType.getSimpleName()); - // 如果字段类型是Object类型,则遍历Object类型里的字段 - if (BaseRequest.class.isAssignableFrom(declaredFieldType)) { - fieldDescription.setGenericFieldMetadata(getClassFieldDescription(declaredFieldType)); - } - - // 如果是泛型类型,遍历泛泛型的class类型里的字段 - if (Collection.class.isAssignableFrom(declaredFieldType)) { - Class genericClass = TypeUtil.getClass(TypeUtil.getTypeArgument(TypeUtil.getType(declaredField))); - if (BaseRequest.class.isAssignableFrom(genericClass)) { - fieldDescription.setGenericFieldMetadata(getClassFieldDescription(genericClass)); + // 如果字段类型是Object类型,则遍历Object类型里的字段 + if (BaseRequest.class.isAssignableFrom(declaredFieldType)) { + fieldDescription.setGenericFieldMetadata(getClassFieldDescription(declaredFieldType)); } - } - // 获取字段的所有注解 - Annotation[] annotations = declaredField.getAnnotations(); - if (annotations != null && annotations.length > 0) { - - // 设置字段的所有注解 - fieldDescription.setAnnotations(annotationsToStrings(annotations)); - - // 遍历字段上的所有注解,找到带groups属性的,按group分类组装注解 - Map> groupAnnotations = new HashMap<>(); - for (Annotation annotation : annotations) { - Class[] validateGroupsClasses = invokeAnnotationMethodIgnoreError(annotation, "groups", Class[].class); - if (validateGroupsClasses != null) { - for (Class validateGroupsClass : validateGroupsClasses) { - addGroupValidateAnnotation(annotation, validateGroupsClass, groupAnnotations); - } + // 如果是泛型类型,遍历泛泛型的class类型里的字段 + if (Collection.class.isAssignableFrom(declaredFieldType)) { + Class genericClass = TypeUtil.getClass(TypeUtil.getTypeArgument(TypeUtil.getType(declaredField))); + if (BaseRequest.class.isAssignableFrom(genericClass)) { + fieldDescription.setGenericFieldMetadata(getClassFieldDescription(genericClass)); } } - // 设置分组注解 - fieldDescription.setGroupValidationMessage(groupAnnotations); - // 填充字段的中文名称 - ChineseDescription chineseDescription = declaredField.getAnnotation(ChineseDescription.class); - if (chineseDescription != null) { - fieldDescription.setChineseName(chineseDescription.value()); + // 获取字段的所有注解 + Annotation[] annotations = declaredField.getAnnotations(); + if (annotations != null && annotations.length > 0) { + + // 设置字段的所有注解 + fieldDescription.setAnnotations(annotationsToStrings(annotations)); + + // 遍历字段上的所有注解,找到带groups属性的,按group分类组装注解 + Map> groupAnnotations = new HashMap<>(); + for (Annotation annotation : annotations) { + Class[] validateGroupsClasses = invokeAnnotationMethodIgnoreError(annotation, "groups", Class[].class); + if (validateGroupsClasses != null) { + for (Class validateGroupsClass : validateGroupsClasses) { + addGroupValidateAnnotation(annotation, validateGroupsClass, groupAnnotations); + } + } + } + // 设置分组注解 + fieldDescription.setGroupValidationMessage(groupAnnotations); + + // 填充字段的中文名称 + ChineseDescription chineseDescription = declaredField.getAnnotation(ChineseDescription.class); + if (chineseDescription != null) { + fieldDescription.setChineseName(chineseDescription.value()); + } } + + fieldDescriptions.add(fieldDescription); } - fieldDescriptions.add(fieldDescription); + // 获取本类的父类 + clazz = clazz.getSuperclass(); } return fieldDescriptions;