diff --git a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/CollectionOpenApiSchemaConvertor.java b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/CollectionOpenApiSchemaConvertor.java index 285354863..88c382101 100644 --- a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/CollectionOpenApiSchemaConvertor.java +++ b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/CollectionOpenApiSchemaConvertor.java @@ -2,6 +2,8 @@ import io.dongtai.iast.api.openapi.domain.Schema; +import java.util.Collection; + /** * 用于Java内置的集合类型的转换,比如List、Set、Map * @@ -31,10 +33,15 @@ public boolean canConvert(Class clazz) { return clazz != null && ( listOpenApiSchemaConvertor.canConvert(clazz) || setOpenApiSchemaConvertor.canConvert(clazz) || - mapOpenApiSchemaConvertor.canConvert(clazz) + mapOpenApiSchemaConvertor.canConvert(clazz) || + isCollectionClass(clazz) ); } + private boolean isCollectionClass(Class clazz) { + return clazz != null && Collection.class.isAssignableFrom(clazz); + } + @Override public Schema convert(Class clazz) { if (listOpenApiSchemaConvertor.canConvert(clazz)) { @@ -43,6 +50,8 @@ public Schema convert(Class clazz) { return setOpenApiSchemaConvertor.convert(clazz); } else if (mapOpenApiSchemaConvertor.canConvert(clazz)) { return mapOpenApiSchemaConvertor.convert(clazz); + } else if (isCollectionClass(clazz)) { + return listOpenApiSchemaConvertor.convert(clazz); } else { return null; } diff --git a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/JavaBeanOpenApiSchemaConvertor.java b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/JavaBeanOpenApiSchemaConvertor.java index 5cc29afaf..2bb6e7d5f 100644 --- a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/JavaBeanOpenApiSchemaConvertor.java +++ b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/JavaBeanOpenApiSchemaConvertor.java @@ -88,7 +88,7 @@ private List parseFieldList(Class clazz) { List allFieldList = new ArrayList<>(); Set fieldNameSet = new HashSet<>(); - Set getterNameLowercaseSet = new HashSet<>(); + Set setterNameLowercaseSet = new HashSet<>(); Class currentClass = clazz; while (currentClass != null && currentClass != Object.class) { @@ -104,7 +104,7 @@ private List parseFieldList(Class clazz) { } // 收集类上的方法名字 - getterNameLowercaseSet.addAll(parseGetterNameLowercaseSet(currentClass)); + setterNameLowercaseSet.addAll(parseSetterNameLowercaseSet(currentClass)); // 再处理父类,一路向上知道找到根 currentClass = currentClass.getSuperclass(); @@ -113,7 +113,7 @@ private List parseFieldList(Class clazz) { // 然后筛选出来符合条件的字段,作为bean的属性 List beanFieldList = new ArrayList<>(); allFieldList.forEach(field -> { - if (isBeanField(field, getterNameLowercaseSet)) { + if (isBeanField(field, setterNameLowercaseSet)) { beanFieldList.add(field); } }); @@ -125,10 +125,10 @@ private List parseFieldList(Class clazz) { * 判断Field是否是bean的field * * @param field - * @param getterNameLowercaseSet + * @param setterNameLowercaseSet * @return */ - private boolean isBeanField(Field field, Set getterNameLowercaseSet) { + private boolean isBeanField(Field field, Set setterNameLowercaseSet) { // 采用白名单的方式,public并且是实例方法则认为是可以的 if (Modifier.isPublic(field.getModifiers())) { @@ -136,30 +136,25 @@ private boolean isBeanField(Field field, Set getterNameLowercaseSet) { } // 私有方法并且有对应的getter - String setterMethodName = ""; - if (field.getType() == boolean.class || field.getType() == Boolean.class) { - setterMethodName = "is" + field.getName().toLowerCase(); - } else { - setterMethodName = "get" + field.getName().toLowerCase(); - } - return getterNameLowercaseSet.contains(setterMethodName); + String setterMethodName = "set" + field.getName().toLowerCase(); + return setterNameLowercaseSet.contains(setterMethodName); } /** - * 解析类上的getter方法,并将其方法名都转为小写返回 + * 解析类上的setter方法,并将其方法名都转为小写返回 * * @param clazz * @return */ - private Set parseGetterNameLowercaseSet(Class clazz) { - Set getterNameLowercaseSet = new HashSet<>(); + private Set parseSetterNameLowercaseSet(Class clazz) { + Set setterNameLowercaseSet = new HashSet<>(); for (Method declaredMethod : clazz.getDeclaredMethods()) { // 这里采用比较简单的策略,只要是关键字开头的就认为是ok的 - if (declaredMethod.getName().startsWith("get") || declaredMethod.getName().startsWith("is")) { - getterNameLowercaseSet.add(declaredMethod.getName().toLowerCase()); + if (declaredMethod.getName().startsWith("set")) { + setterNameLowercaseSet.add(declaredMethod.getName().toLowerCase()); } } - return getterNameLowercaseSet; + return setterNameLowercaseSet; } @Override diff --git a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/PrimitiveTypeConvertor.java b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/PrimitiveTypeConvertor.java index 3bbe3c2cb..0bf2e783d 100644 --- a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/PrimitiveTypeConvertor.java +++ b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/PrimitiveTypeConvertor.java @@ -3,6 +3,7 @@ import io.dongtai.iast.api.openapi.domain.DataType; import io.dongtai.iast.api.openapi.domain.Schema; +import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -21,6 +22,7 @@ public class PrimitiveTypeConvertor extends BaseOpenApiSchemaConvertor { // 这里把String也看做是primitive的了 ,虽然看起来可能有点奇怪... primitiveTypeSet.add(String.class); + primitiveTypeSet.add(Date.class); primitiveTypeSet.add(Character.class); primitiveTypeSet.add(char.class); @@ -74,6 +76,8 @@ public Schema convert(Class simpleClass) { // 字符串类型和字符类型都修改为字符串类型,注意这里产生了一个类型丢失 if (simpleClass == String.class || simpleClass == Character.class || simpleClass == char.class) { return new Schema(DataType.String()); + } else if (simpleClass == Date.class) { + return new Schema(DataType.Date()); } else if (simpleClass == Byte.class || simpleClass == byte.class || simpleClass == Short.class || simpleClass == short.class || simpleClass == Integer.class || simpleClass == int.class) { diff --git a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/domain/DataType.java b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/domain/DataType.java index eba285c17..83684fd97 100644 --- a/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/domain/DataType.java +++ b/dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/domain/DataType.java @@ -71,6 +71,10 @@ public static DataType String() { return new DataType("string", null, null); } + public static DataType Date() { + return new DataType("string", "date-time", null); + } + public static DataType StringArray() { return Array(String()); }