Skip to content

Commit 3b5e2ae

Browse files
authored
Merge pull request #544 from CC11001100/develop
fix some bug
2 parents 0c863d0 + 68350ce commit 3b5e2ae

File tree

4 files changed

+31
-19
lines changed

4 files changed

+31
-19
lines changed

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/CollectionOpenApiSchemaConvertor.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.dongtai.iast.api.openapi.domain.Schema;
44

5+
import java.util.Collection;
6+
57
/**
68
* 用于Java内置的集合类型的转换,比如List、Set、Map
79
*
@@ -31,10 +33,15 @@ public boolean canConvert(Class clazz) {
3133
return clazz != null && (
3234
listOpenApiSchemaConvertor.canConvert(clazz) ||
3335
setOpenApiSchemaConvertor.canConvert(clazz) ||
34-
mapOpenApiSchemaConvertor.canConvert(clazz)
36+
mapOpenApiSchemaConvertor.canConvert(clazz) ||
37+
isCollectionClass(clazz)
3538
);
3639
}
3740

41+
private boolean isCollectionClass(Class clazz) {
42+
return clazz != null && Collection.class.isAssignableFrom(clazz);
43+
}
44+
3845
@Override
3946
public Schema convert(Class clazz) {
4047
if (listOpenApiSchemaConvertor.canConvert(clazz)) {
@@ -43,6 +50,8 @@ public Schema convert(Class clazz) {
4350
return setOpenApiSchemaConvertor.convert(clazz);
4451
} else if (mapOpenApiSchemaConvertor.canConvert(clazz)) {
4552
return mapOpenApiSchemaConvertor.convert(clazz);
53+
} else if (isCollectionClass(clazz)) {
54+
return listOpenApiSchemaConvertor.convert(clazz);
4655
} else {
4756
return null;
4857
}

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/JavaBeanOpenApiSchemaConvertor.java

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private List<Field> parseFieldList(Class clazz) {
8888

8989
List<Field> allFieldList = new ArrayList<>();
9090
Set<String> fieldNameSet = new HashSet<>();
91-
Set<String> getterNameLowercaseSet = new HashSet<>();
91+
Set<String> setterNameLowercaseSet = new HashSet<>();
9292
Class currentClass = clazz;
9393

9494
while (currentClass != null && currentClass != Object.class) {
@@ -104,7 +104,7 @@ private List<Field> parseFieldList(Class clazz) {
104104
}
105105

106106
// 收集类上的方法名字
107-
getterNameLowercaseSet.addAll(parseGetterNameLowercaseSet(currentClass));
107+
setterNameLowercaseSet.addAll(parseSetterNameLowercaseSet(currentClass));
108108

109109
// 再处理父类,一路向上知道找到根
110110
currentClass = currentClass.getSuperclass();
@@ -113,7 +113,7 @@ private List<Field> parseFieldList(Class clazz) {
113113
// 然后筛选出来符合条件的字段,作为bean的属性
114114
List<Field> beanFieldList = new ArrayList<>();
115115
allFieldList.forEach(field -> {
116-
if (isBeanField(field, getterNameLowercaseSet)) {
116+
if (isBeanField(field, setterNameLowercaseSet)) {
117117
beanFieldList.add(field);
118118
}
119119
});
@@ -125,41 +125,36 @@ private List<Field> parseFieldList(Class clazz) {
125125
* 判断Field是否是bean的field
126126
*
127127
* @param field
128-
* @param getterNameLowercaseSet
128+
* @param setterNameLowercaseSet
129129
* @return
130130
*/
131-
private boolean isBeanField(Field field, Set<String> getterNameLowercaseSet) {
131+
private boolean isBeanField(Field field, Set<String> setterNameLowercaseSet) {
132132

133133
// 采用白名单的方式,public并且是实例方法则认为是可以的
134134
if (Modifier.isPublic(field.getModifiers())) {
135135
return !Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers());
136136
}
137137

138138
// 私有方法并且有对应的getter
139-
String setterMethodName = "";
140-
if (field.getType() == boolean.class || field.getType() == Boolean.class) {
141-
setterMethodName = "is" + field.getName().toLowerCase();
142-
} else {
143-
setterMethodName = "get" + field.getName().toLowerCase();
144-
}
145-
return getterNameLowercaseSet.contains(setterMethodName);
139+
String setterMethodName = "set" + field.getName().toLowerCase();
140+
return setterNameLowercaseSet.contains(setterMethodName);
146141
}
147142

148143
/**
149-
* 解析类上的getter方法,并将其方法名都转为小写返回
144+
* 解析类上的setter方法,并将其方法名都转为小写返回
150145
*
151146
* @param clazz
152147
* @return
153148
*/
154-
private Set<String> parseGetterNameLowercaseSet(Class clazz) {
155-
Set<String> getterNameLowercaseSet = new HashSet<>();
149+
private Set<String> parseSetterNameLowercaseSet(Class clazz) {
150+
Set<String> setterNameLowercaseSet = new HashSet<>();
156151
for (Method declaredMethod : clazz.getDeclaredMethods()) {
157152
// 这里采用比较简单的策略,只要是关键字开头的就认为是ok的
158-
if (declaredMethod.getName().startsWith("get") || declaredMethod.getName().startsWith("is")) {
159-
getterNameLowercaseSet.add(declaredMethod.getName().toLowerCase());
153+
if (declaredMethod.getName().startsWith("set")) {
154+
setterNameLowercaseSet.add(declaredMethod.getName().toLowerCase());
160155
}
161156
}
162-
return getterNameLowercaseSet;
157+
return setterNameLowercaseSet;
163158
}
164159

165160
@Override

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/PrimitiveTypeConvertor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.dongtai.iast.api.openapi.domain.DataType;
44
import io.dongtai.iast.api.openapi.domain.Schema;
55

6+
import java.util.Date;
67
import java.util.HashSet;
78
import java.util.Set;
89

@@ -21,6 +22,7 @@ public class PrimitiveTypeConvertor extends BaseOpenApiSchemaConvertor {
2122

2223
// 这里把String也看做是primitive的了 ,虽然看起来可能有点奇怪...
2324
primitiveTypeSet.add(String.class);
25+
primitiveTypeSet.add(Date.class);
2426

2527
primitiveTypeSet.add(Character.class);
2628
primitiveTypeSet.add(char.class);
@@ -74,6 +76,8 @@ public Schema convert(Class simpleClass) {
7476
// 字符串类型和字符类型都修改为字符串类型,注意这里产生了一个类型丢失
7577
if (simpleClass == String.class || simpleClass == Character.class || simpleClass == char.class) {
7678
return new Schema(DataType.String());
79+
} else if (simpleClass == Date.class) {
80+
return new Schema(DataType.Date());
7781
} else if (simpleClass == Byte.class || simpleClass == byte.class ||
7882
simpleClass == Short.class || simpleClass == short.class ||
7983
simpleClass == Integer.class || simpleClass == int.class) {

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/domain/DataType.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ public static DataType String() {
7171
return new DataType("string", null, null);
7272
}
7373

74+
public static DataType Date() {
75+
return new DataType("string", "date-time", null);
76+
}
77+
7478
public static DataType StringArray() {
7579
return Array(String());
7680
}

0 commit comments

Comments
 (0)