From 362f9d624dc87234feba06bf40b5e93255d1aaf6 Mon Sep 17 00:00:00 2001 From: rays <1615175118@qq.com> Date: Fri, 25 Jun 2021 13:53:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B1=BB=E5=9E=8B=E5=88=A4?= =?UTF-8?q?=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scanner/api/util/ClassReflectUtil.java | 23 +++++++++++++++---- .../service/impl/ApiResourceServiceImpl.java | 4 +++- 2 files changed, 22 insertions(+), 5 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 f6b1aae73..667b60abf 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 @@ -31,6 +31,7 @@ import cn.hutool.core.util.TypeUtil; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata; +import sun.reflect.generics.reflectiveObjects.WildcardTypeImpl; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -116,9 +117,24 @@ public class ClassReflectUtil { } else if (List.class.isAssignableFrom(declaredFieldType)) { // 如果是集合类型,则处理集合里面的字段 Type genericType = declaredField.getGenericType(); - ParameterizedType pt = (ParameterizedType)genericType; + // 得到泛型里的class类型对象 - Class actualTypeArgument = (Class)pt.getActualTypeArguments()[0]; + Class actualTypeArgument; + // 处理List没写泛型的情况 + if (genericType instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType)genericType; + Type typeArgument = pt.getActualTypeArguments()[0]; + + // 处理List这种情况 + if (!(typeArgument instanceof WildcardTypeImpl)) { + actualTypeArgument = (Class)pt.getActualTypeArguments()[0]; + } else { + actualTypeArgument = Object.class; + } + } else { + actualTypeArgument = Object.class; + } + // 基本类型处理 if (actualTypeArgument.isPrimitive() || "java.lang".equals(actualTypeArgument.getPackage().getName()) || "java.util".equals(actualTypeArgument.getPackage().getName())) { FieldMetadata item = new FieldMetadata(); @@ -142,7 +158,6 @@ public class ClassReflectUtil { fieldDescription.setGenericFieldMetadata(getClassFieldDescription(genericClass)); } } - // 获取字段的所有注解 Annotation[] annotations = declaredField.getAnnotations(); if (annotations != null && annotations.length > 0) { @@ -182,7 +197,7 @@ public class ClassReflectUtil { try { Class annotationType = apiResource.annotationType(); Method method = annotationType.getMethod(methodName); - return (T) method.invoke(apiResource); + return (T)method.invoke(apiResource); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { // 忽略异常 } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/ApiResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/ApiResourceServiceImpl.java index 595d2d2c3..bf4548359 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/ApiResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/ApiResourceServiceImpl.java @@ -415,7 +415,9 @@ public class ApiResourceServiceImpl extends ServiceImpl