2020 */
2121package 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
2925import com .ly .doc .constants .DocGlobalConstants ;
26+ import com .ly .doc .constants .ValidatorAnnotations ;
3027import com .ly .doc .model .ApiConfig ;
3128import com .ly .doc .model .CustomField ;
3229import com .ly .doc .model .DocJavaField ;
3330import com .ly .doc .model .FormData ;
3431import com .ly .doc .utils .*;
32+ import com .power .common .util .CollectionUtil ;
3533import com .power .common .util .RandomUtil ;
3634import com .power .common .util .StringUtil ;
3735import com .ly .doc .builder .ProjectDocConfigBuilder ;
3836import com .ly .doc .constants .DocTags ;
37+ import com .thoughtworks .qdox .model .JavaAnnotation ;
3938import com .thoughtworks .qdox .model .JavaClass ;
4039import 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 ;
0 commit comments