mirror of https://gitee.com/stylefeng/roses
【8.3.0】【scanner】更新字段扫描获取父级类的信息
parent
eaacc3be48
commit
617e16fa83
|
@ -75,28 +75,8 @@ public class ClassDetailMetadataFactory {
|
||||||
case OBJECT:
|
case OBJECT:
|
||||||
// 如果是实体对象,则描述实体对象的所有字段信息
|
// 如果是实体对象,则描述实体对象的所有字段信息
|
||||||
Class<?> objectClass = (Class<?>) fieldType;
|
Class<?> objectClass = (Class<?>) fieldType;
|
||||||
Field[] fields = objectClass.getDeclaredFields();
|
|
||||||
fieldMetadata = new LinkedHashSet<>();
|
fieldMetadata = new LinkedHashSet<>();
|
||||||
|
processClassFields(objectClass, fieldMetadata, uuid);
|
||||||
// 在处理Object中所有字段之前,将当前父类放进context,所有子字段不能含有父类的类型,否则会递归
|
|
||||||
MetadataContext.addClassRecord(uuid, objectClass.getName());
|
|
||||||
|
|
||||||
for (Field field : fields) {
|
|
||||||
FieldMetadata fieldInfo;
|
|
||||||
|
|
||||||
// 判断字段是否是基础字段例如serialVersionUID,或者delFlag等字段
|
|
||||||
if (ScannerConstants.DONT_PARSE_FIELD.contains(field.getName())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断该实体是否被解析过,防止无限递归解析实体
|
|
||||||
if (MetadataContext.ensureFieldClassHaveParse(uuid, field.getGenericType())) {
|
|
||||||
fieldInfo = FieldDescriptionUtil.createBasicMetadata(field, uuid);
|
|
||||||
} else {
|
|
||||||
fieldInfo = FieldDescriptionUtil.createFieldMetadata(field, uuid);
|
|
||||||
}
|
|
||||||
fieldMetadata.add(fieldInfo);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OBJECT_WITH_GENERIC:
|
case OBJECT_WITH_GENERIC:
|
||||||
// 如果是带泛型的Object实体类型
|
// 如果是带泛型的Object实体类型
|
||||||
|
@ -170,4 +150,40 @@ public class ClassDetailMetadataFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定类的字段信息,增加可以获取父级的类的字段
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2022/1/14 18:51
|
||||||
|
*/
|
||||||
|
private static void processClassFields(Class<?> clazz, Set<FieldMetadata> fieldMetadata, String uuid) {
|
||||||
|
if (clazz == null || clazz == Object.class) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在处理Object中所有字段之前,将当前父类放进context,所有子字段不能含有父类的类型,否则会递归
|
||||||
|
MetadataContext.addClassRecord(uuid, clazz.getName());
|
||||||
|
|
||||||
|
Field[] fields = clazz.getDeclaredFields();
|
||||||
|
for (Field field : fields) {
|
||||||
|
FieldMetadata fieldInfo;
|
||||||
|
|
||||||
|
// 判断字段是否是基础字段例如serialVersionUID,或者delFlag等字段
|
||||||
|
if (ScannerConstants.DONT_PARSE_FIELD.contains(field.getName())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断该实体是否被解析过,防止无限递归解析实体
|
||||||
|
if (MetadataContext.ensureFieldClassHaveParse(uuid, field.getGenericType())) {
|
||||||
|
fieldInfo = FieldDescriptionUtil.createBasicMetadata(field, uuid);
|
||||||
|
} else {
|
||||||
|
fieldInfo = FieldDescriptionUtil.createFieldMetadata(field, uuid);
|
||||||
|
}
|
||||||
|
fieldMetadata.add(fieldInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 递归处理父类
|
||||||
|
processClassFields(clazz.getSuperclass(), fieldMetadata, uuid);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue