修改类型判断

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.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) {

View File

@ -415,7 +415,9 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
item.setApiResourceId(apiResourceId);
item.setFieldCode(fieldMetadata.getFieldName());
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");
} else if (fieldMetadata.getFieldClassPath().contains("java.io")) {
item.setFieldType("file");