修改类型判断

pull/22/head
rays 2021-06-25 13:53:26 +08:00
parent e5ab118068
commit 362f9d624d
2 changed files with 22 additions and 5 deletions

View File

@ -31,6 +31,7 @@ import cn.hutool.core.util.TypeUtil;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; 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.annotation.field.ChineseDescription;
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
import sun.reflect.generics.reflectiveObjects.WildcardTypeImpl;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.*; import java.lang.reflect.*;
@ -116,9 +117,24 @@ public class ClassReflectUtil {
} else if (List.class.isAssignableFrom(declaredFieldType)) { } else if (List.class.isAssignableFrom(declaredFieldType)) {
// 如果是集合类型,则处理集合里面的字段 // 如果是集合类型,则处理集合里面的字段
Type genericType = declaredField.getGenericType(); Type genericType = declaredField.getGenericType();
ParameterizedType pt = (ParameterizedType)genericType;
// 得到泛型里的class类型对象 // 得到泛型里的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())) { if (actualTypeArgument.isPrimitive() || "java.lang".equals(actualTypeArgument.getPackage().getName()) || "java.util".equals(actualTypeArgument.getPackage().getName())) {
FieldMetadata item = new FieldMetadata(); FieldMetadata item = new FieldMetadata();
@ -142,7 +158,6 @@ public class ClassReflectUtil {
fieldDescription.setGenericFieldMetadata(getClassFieldDescription(genericClass)); fieldDescription.setGenericFieldMetadata(getClassFieldDescription(genericClass));
} }
} }
// 获取字段的所有注解 // 获取字段的所有注解
Annotation[] annotations = declaredField.getAnnotations(); Annotation[] annotations = declaredField.getAnnotations();
if (annotations != null && annotations.length > 0) { if (annotations != null && annotations.length > 0) {
@ -182,7 +197,7 @@ public class ClassReflectUtil {
try { try {
Class<? extends Annotation> annotationType = apiResource.annotationType(); Class<? extends Annotation> annotationType = apiResource.annotationType();
Method method = annotationType.getMethod(methodName); Method method = annotationType.getMethod(methodName);
return (T) method.invoke(apiResource); return (T)method.invoke(apiResource);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
// 忽略异常 // 忽略异常
} }

View File

@ -415,7 +415,9 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
item.setApiResourceId(apiResourceId); item.setApiResourceId(apiResourceId);
item.setFieldCode(fieldMetadata.getFieldName()); item.setFieldCode(fieldMetadata.getFieldName());
item.setFieldName(fieldMetadata.getChineseName()); item.setFieldName(fieldMetadata.getChineseName());
if (fieldMetadata.getFieldClassPath().contains("java.util")) { if (ObjectUtil.isEmpty(fieldMetadata.getFieldClassPath())) {
item.setFieldType("object");
} else if (fieldMetadata.getFieldClassPath().contains("java.util")) {
item.setFieldType("list"); item.setFieldType("list");
} else if (fieldMetadata.getFieldClassPath().contains("java.io")) { } else if (fieldMetadata.getFieldClassPath().contains("java.io")) {
item.setFieldType("file"); item.setFieldType("file");