Skip to content
This repository was archived by the owner on Dec 4, 2025. It is now read-only.

Commit 8f281bd

Browse files
committed
fix: Fix the bug where enum type parameter comments are missing in the query
1 parent 652c70e commit 8f281bd

5 files changed

Lines changed: 46 additions & 23 deletions

File tree

src/main/java/com/ly/doc/helper/FormDataBuildHelper.java

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,21 @@
2020
*/
2121
package com.ly.doc.helper;
2222

23-
import java.util.ArrayList;
24-
import java.util.LinkedHashMap;
25-
import java.util.List;
26-
import java.util.Map;
27-
import java.util.Objects;
23+
import java.util.*;
2824

2925
import com.ly.doc.constants.DocGlobalConstants;
26+
import com.ly.doc.constants.ValidatorAnnotations;
3027
import com.ly.doc.model.ApiConfig;
3128
import com.ly.doc.model.CustomField;
3229
import com.ly.doc.model.DocJavaField;
3330
import com.ly.doc.model.FormData;
3431
import com.ly.doc.utils.*;
32+
import com.power.common.util.CollectionUtil;
3533
import com.power.common.util.RandomUtil;
3634
import com.power.common.util.StringUtil;
3735
import com.ly.doc.builder.ProjectDocConfigBuilder;
3836
import com.ly.doc.constants.DocTags;
37+
import com.thoughtworks.qdox.model.JavaAnnotation;
3938
import com.thoughtworks.qdox.model.JavaClass;
4039
import com.thoughtworks.qdox.model.JavaField;
4140

@@ -52,15 +51,19 @@ public class FormDataBuildHelper extends BaseHelper {
5251
* @param counter invoked counter
5352
* @param builder ProjectDocConfigBuilder
5453
* @param pre pre
54+
* @param groupClasses group class
5555
* @return list of FormData
5656
*/
5757
public static List<FormData> getFormData(String className, Map<String, String> registryClasses, int counter
58-
, ProjectDocConfigBuilder builder, String pre) {
58+
, ProjectDocConfigBuilder builder, String pre, Set<String> groupClasses) {
5959

6060
if (StringUtil.isEmpty(className)) {
6161
throw new RuntimeException("Class name can't be null or empty.");
6262
}
63+
6364
ApiConfig apiConfig = builder.getApiConfig();
65+
66+
ClassLoader classLoader = builder.getApiConfig().getClassLoader();
6467
List<FormData> formDataList = new ArrayList<>();
6568
if (counter > apiConfig.getRecursionLimit()) {
6669
return formDataList;
@@ -78,7 +81,7 @@ public static List<FormData> getFormData(String className, Map<String, String> r
7881
String simpleName = DocClassUtil.getSimpleName(className);
7982
String[] globGicName = DocClassUtil.getSimpleGicName(className);
8083
JavaClass cls = builder.getJavaProjectBuilder().getClassByName(simpleName);
81-
List<DocJavaField> fields = JavaClassUtil.getFields(cls, 0, new LinkedHashMap<>(),builder.getApiConfig().getClassLoader());
84+
List<DocJavaField> fields = JavaClassUtil.getFields(cls, 0, new LinkedHashMap<>(), builder.getApiConfig().getClassLoader());
8285
if (JavaClassValidateUtil.isPrimitive(simpleName)) {
8386
FormData formData = new FormData();
8487
formData.setKey(pre);
@@ -95,22 +98,39 @@ public static List<FormData> getFormData(String className, Map<String, String> r
9598
if (JavaClassValidateUtil.isPrimitive(gicName)) {
9699
pre = pre.substring(0, pre.lastIndexOf("."));
97100
}
98-
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + "[]"));
101+
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + "[]", groupClasses));
99102
}
100103
int n = 0;
104+
out:
101105
for (DocJavaField docField : fields) {
102106
JavaField field = docField.getJavaField();
103107
String fieldName = field.getName();
104108
String subTypeName = docField.getTypeFullyQualifiedName();
105109
String fieldGicName = docField.getTypeGenericCanonicalName();
106110
JavaClass javaClass = field.getType();
107111
if (field.isStatic() || "this$0".equals(fieldName) ||
108-
JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) {
112+
JavaClassValidateUtil.isIgnoreFieldTypes(subTypeName)) {
109113
continue;
110114
}
111115
if (field.isTransient() && skipTransientField) {
112116
continue;
113117
}
118+
List<JavaAnnotation> javaAnnotations = docField.getAnnotations();
119+
for (JavaAnnotation annotation : javaAnnotations) {
120+
String simpleAnnotationName = annotation.getType().getValue();
121+
if (ValidatorAnnotations.NULL.equals(simpleAnnotationName)) {
122+
if (CollectionUtil.isEmpty(groupClasses)) {
123+
continue out;
124+
}
125+
Set<String> groupClassList = JavaClassUtil.getParamGroupJavaClass(annotation);
126+
for (String javaClassName : groupClassList) {
127+
if (groupClasses.contains(javaClassName)) {
128+
continue out;
129+
}
130+
}
131+
}
132+
}
133+
114134
if (responseFieldToUnderline || requestFieldToUnderline) {
115135
fieldName = StringUtil.camelToUnderline(fieldName);
116136
}
@@ -119,7 +139,7 @@ public static List<FormData> getFormData(String className, Map<String, String> r
119139
if (JavaClassValidateUtil.isMap(subTypeName)) {
120140
continue;
121141
}
122-
String comment = docField.getComment();
142+
String comment = docField.getComment() + JavaFieldUtil.getJsrComment(apiConfig.isShowValidation(), classLoader, javaAnnotations);
123143
if (JavaClassValidateUtil.isFile(fieldGicName)) {
124144
FormData formData = new FormData();
125145
formData.setKey(pre + fieldName);
@@ -140,7 +160,7 @@ public static List<FormData> getFormData(String className, Map<String, String> r
140160
CustomField customRequestField = builder.getCustomReqFieldMap().get(key);
141161
// cover request value
142162
if (Objects.nonNull(customRequestField) && Objects.nonNull(customRequestField.getValue())
143-
&& JavaClassUtil.isTargetChildClass(simpleName, customRequestField.getOwnerClassName())) {
163+
&& JavaClassUtil.isTargetChildClass(simpleName, customRequestField.getOwnerClassName())) {
144164
fieldValue = String.valueOf(customRequestField.getValue());
145165
}
146166
FormData formData = new FormData();
@@ -186,25 +206,25 @@ public static List<FormData> getFormData(String className, Map<String, String> r
186206
if (len > 0) {
187207
String gicName = globGicName[n];
188208
if (!JavaClassValidateUtil.isPrimitive(gicName) && !simpleName.equals(gicName)) {
189-
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + fieldName + "[0]."));
209+
formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + fieldName + "[0].", groupClasses));
190210
}
191211
}
192212
} else {
193-
formDataList.addAll(getFormData(gName, registryClasses, counter, builder, pre + fieldName + "[0]."));
213+
formDataList.addAll(getFormData(gName, registryClasses, counter, builder, pre + fieldName + "[0].", groupClasses));
194214
}
195215
}
196216
}
197217
}
198218
// else if (subTypeName.length() == 1 || DocGlobalConstants.JAVA_OBJECT_FULLY.equals(subTypeName)) {
199-
// For Generics,do nothing, spring mvc not support
219+
// For Generics,do nothing, spring mvc not support
200220
// if (n < globGicName.length) {
201221
// String gicName = globGicName[n];
202222
// formDataList.addAll(getFormData(gicName, registryClasses, counter, builder, pre + fieldName + "."));
203223
// }
204224
// n++;
205225
// }
206226
else {
207-
formDataList.addAll(getFormData(javaClass.getGenericFullyQualifiedName(), registryClasses, counter, builder, pre + fieldName + "."));
227+
formDataList.addAll(getFormData(javaClass.getGenericFullyQualifiedName(), registryClasses, counter, builder, pre + fieldName + ".", groupClasses));
208228
}
209229
}
210230
return formDataList;

src/main/java/com/ly/doc/template/IRestDocTemplate.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ default List<ApiMethodDoc> buildEntryPointMethod(
506506
//handle extension
507507
Map<String, String> extensions = DocUtil.getCommentsByTag(method, DocTags.EXTENSION, null);
508508
if (extensions != null) {
509-
Map extensionParams = apiMethodDoc.getExtensions() != null ? apiMethodDoc.getExtensions() : new HashMap();
509+
Map<String, Object> extensionParams = apiMethodDoc.getExtensions() != null ? apiMethodDoc.getExtensions() : new HashMap();
510510
extensions.entrySet().stream().forEach(e -> extensionParams.put(e.getKey(), DocUtil.detectTagValue(e.getValue())));
511511
apiMethodDoc.setExtensions(extensionParams);
512512
}
@@ -803,13 +803,16 @@ default ApiMethodReqParam requestParams(final DocJavaMethod docJavaMethod, Proje
803803
else if (javaClass.isEnum()) {
804804
String enumName = JavaClassUtil.getEnumParams(javaClass);
805805
Object value = JavaClassUtil.getEnumValue(javaClass, isPathVariable || queryParam);
806+
if (Boolean.TRUE.equals(builder.getApiConfig().getInlineEnum())) {
807+
comment.append("<br/>[Enum: "+StringUtil.removeQuotes(enumName)+"]");
808+
}
806809
ApiParam param = ApiParam.of().setField(paramName)
807810
.setId(paramList.size() + 1)
808811
.setPathParam(isPathVariable)
809812
.setQueryParam(queryParam)
810813
.setValue(StringUtil.removeDoubleQuotes(String.valueOf(value)))
811814
.setType(DocGlobalConstants.PARAM_TYPE_ENUM)
812-
.setDesc(StringUtil.removeQuotes(enumName))
815+
.setDesc(comment.toString())
813816
.setRequired(required)
814817
.setVersion(DocGlobalConstants.DEFAULT_VERSION)
815818
.setEnumInfo(JavaClassUtil.getEnumInfo(javaClass, builder))
@@ -1039,7 +1042,7 @@ default ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
10391042
formData.setValue(strVal);
10401043
formDataList.add(formData);
10411044
} else {
1042-
formDataList.addAll(FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY));
1045+
formDataList.addAll(FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY, groupClasses));
10431046
}
10441047
}
10451048

@@ -1054,7 +1057,7 @@ default ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
10541057
// formData add to params '--data'
10551058
queryParamsMap.putAll(formDataToMap);
10561059
// set example body
1057-
RequestExampleUtil.setExampleBody(apiMethodDoc,requestExample,formDataList,pathParamsMap,queryParamsMap);
1060+
RequestExampleUtil.setExampleBody(apiMethodDoc, requestExample, formDataList, pathParamsMap, queryParamsMap);
10581061
return requestExample;
10591062
}
10601063

src/main/java/com/ly/doc/template/JAXRSDocBuildTemplate.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ private ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
627627
formDataList.add(formData);
628628
} else {
629629
formDataList.addAll(
630-
FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY));
630+
FormDataBuildHelper.getFormData(gicTypeName, new HashMap<>(16), 0, configBuilder, DocGlobalConstants.EMPTY, groupClasses));
631631
}
632632
}
633633
} else {
@@ -640,7 +640,7 @@ private ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
640640
}
641641
}
642642
requestExample.setFormDataList(formDataList);
643-
RequestExampleUtil.setExampleBody(apiMethodDoc,requestExample,formDataList,pathParamsMap,pathParamsMap);
643+
RequestExampleUtil.setExampleBody(apiMethodDoc, requestExample, formDataList, pathParamsMap, pathParamsMap);
644644
return requestExample;
645645
}
646646

src/main/java/com/ly/doc/utils/ParamUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static JavaClass handleSeeEnum(ApiParam param, JavaField javaField, Proje
2929
param.setType(DocGlobalConstants.PARAM_TYPE_ENUM);
3030
}
3131
Object value = JavaClassUtil.getEnumValue(seeEnum, !jsonRequest);
32-
param.setValue(String.valueOf(value));
32+
param.setValue(StringUtil.removeDoubleQuotes(String.valueOf(value)));
3333
param.setEnumValues(JavaClassUtil.getEnumValues(seeEnum));
3434
param.setEnumInfo(JavaClassUtil.getEnumInfo(seeEnum, builder));
3535
// Override old value

0 commit comments

Comments
 (0)