@@ -110,7 +110,7 @@ public static List<ApiParam> buildParams(String className, String pre, int level
110110 fieldNameConvert = PropertyNameHelper .translate (clsAnnotation );
111111 }
112112 JavaClassUtil .genericParamMap (genericMap , cls , globGicName );
113- List < DocJavaField > fields = JavaClassUtil . getFields ( cls , 0 , new LinkedHashMap <>(), classLoader );
113+
114114 if (JavaClassValidateUtil .isPrimitive (simpleName )) {
115115 String processedType = processFieldTypeName (isShowJavaType , simpleName );
116116 paramList .addAll (primitiveReturnRespComment (processedType , atomicInteger , pid ));
@@ -166,7 +166,7 @@ else if (JavaClassValidateUtil.isReactor(simpleName)) {
166166 }
167167 else {
168168 Map <String , String > ignoreFields = JavaClassUtil .getClassJsonIgnoreFields (cls );
169-
169+ List < DocJavaField > fields = JavaClassUtil . getFields ( cls , 0 , new LinkedHashMap <>(), classLoader );
170170 out : for (DocJavaField docField : fields ) {
171171 JavaField field = docField .getJavaField ();
172172 String maxLength = JavaFieldUtil .getParamMaxLength (field .getAnnotations ());
@@ -649,6 +649,22 @@ else if (simpleName.equals(subTypeName)) {
649649 return paramList ;
650650 }
651651
652+ /**
653+ * Builds a list of {@link ApiParam} objects for a map parameter.
654+ * @param globGicName the global generic name array
655+ * @param pre the prefix string
656+ * @param level the level of the parameter
657+ * @param isRequired the requirement status of the parameter
658+ * @param isResp the response flag
659+ * @param registryClasses the map of registry classes
660+ * @param projectBuilder the project configuration builder
661+ * @param groupClasses the set of group classes
662+ * @param pid the parent ID
663+ * @param jsonRequest the JSON request flag
664+ * @param nextLevel the next level of the parameter
665+ * @param atomicInteger the atomic integer for generating unique IDs
666+ * @return a list of {@link ApiParam} objects
667+ */
652668 private static List <ApiParam > buildMapParam (String [] globGicName , String pre , int level , String isRequired ,
653669 boolean isResp , Map <String , String > registryClasses , ProjectDocConfigBuilder projectBuilder ,
654670 Set <String > groupClasses , int pid , boolean jsonRequest , int nextLevel , AtomicInteger atomicInteger ) {
@@ -659,11 +675,13 @@ private static List<ApiParam> buildMapParam(String[] globGicName, String pre, in
659675 // mock map key param
660676 String mapKeySimpleName = DocClassUtil .getSimpleName (globGicName [0 ]);
661677 String valueSimpleName = DocClassUtil .getSimpleName (globGicName [1 ]);
678+ // get map key class
679+ JavaClass mapKeyClass = projectBuilder .getJavaProjectBuilder ().getClassByName (mapKeySimpleName );
662680
681+ boolean isShowJavaType = projectBuilder .getApiConfig ().getShowJavaType ();
682+ String valueSimpleNameType = processFieldTypeName (isShowJavaType , valueSimpleName );
663683 List <ApiParam > paramList = new ArrayList <>();
664684 if (JavaClassValidateUtil .isPrimitive (mapKeySimpleName )) {
665- boolean isShowJavaType = projectBuilder .getApiConfig ().getShowJavaType ();
666- String valueSimpleNameType = processFieldTypeName (isShowJavaType , valueSimpleName );
667685 ApiParam apiParam = ApiParam .of ()
668686 .setField (pre + "mapKey" )
669687 .setType (valueSimpleNameType )
@@ -676,18 +694,66 @@ private static List<ApiParam> buildMapParam(String[] globGicName, String pre, in
676694 .setId (atomicOrDefault (atomicInteger , ++pid ));
677695 paramList .add (apiParam );
678696 }
697+ else if (Objects .nonNull (mapKeyClass ) && mapKeyClass .isEnum () && !mapKeyClass .getEnumConstants ().isEmpty ()) {
698+ Integer keyParentId = null ;
699+ for (JavaField enumConstant : mapKeyClass .getEnumConstants ()) {
700+ ApiParam apiParam = ApiParam .of ()
701+ .setField (pre + enumConstant .getName ())
702+ .setType (valueSimpleNameType )
703+ .setClassName (valueSimpleName )
704+ .setDesc (Optional .ofNullable (projectBuilder .getClassByName (valueSimpleName ))
705+ .map (JavaClass ::getComment )
706+ .orElse ("A map key." ))
707+ .setVersion (DocGlobalConstants .DEFAULT_VERSION )
708+ .setPid (null == keyParentId ? pid : keyParentId )
709+ .setId (paramList .size () + 1 );
710+ if (null == keyParentId ) {
711+ keyParentId = apiParam .getPid ();
712+ }
713+ paramList .add (apiParam );
714+ List <ApiParam > apiParams = addValueParams (valueSimpleName , globGicName , level , isRequired , isResp ,
715+ registryClasses , projectBuilder , groupClasses , apiParam .getId (), jsonRequest , nextLevel ,
716+ atomicInteger );
717+ paramList .addAll (apiParams );
718+ }
719+ return paramList ;
720+ }
721+ paramList .addAll (addValueParams (valueSimpleName , globGicName , level , isRequired , isResp , registryClasses ,
722+ projectBuilder , groupClasses , pid , jsonRequest , nextLevel , atomicInteger ));
723+ return paramList ;
724+ }
725+
726+ /**
727+ * Adds parameters for the map value to the parameter list.
728+ * @param valueSimpleName the simple name of the value type
729+ * @param globGicName the global generic name array
730+ * @param level the level of the parameter
731+ * @param isRequired the requirement status of the parameter
732+ * @param isResp the response flag
733+ * @param registryClasses the map of registry classes
734+ * @param projectBuilder the project configuration builder
735+ * @param groupClasses the set of group classes
736+ * @param pid the parent ID
737+ * @param jsonRequest the JSON request flag
738+ * @param nextLevel the next level of the parameter
739+ * @param atomicInteger the atomic integer for generating unique IDs
740+ * @return the list of {@link ApiParam} objects
741+ */
742+ private static List <ApiParam > addValueParams (String valueSimpleName , String [] globGicName , int level ,
743+ String isRequired , boolean isResp , Map <String , String > registryClasses ,
744+ ProjectDocConfigBuilder projectBuilder , Set <String > groupClasses , int pid , boolean jsonRequest ,
745+ int nextLevel , AtomicInteger atomicInteger ) {
679746 // build param when map value is not primitive
680747 if (JavaClassValidateUtil .isPrimitive (valueSimpleName )) {
681- return paramList ;
748+ return Collections . emptyList () ;
682749 }
683750 StringBuilder preBuilder = new StringBuilder ();
684751 for (int j = 0 ; j < level ; j ++) {
685752 preBuilder .append (DocGlobalConstants .FIELD_SPACE );
686753 }
687754 preBuilder .append (DocGlobalConstants .PARAM_PREFIX );
688- paramList .addAll (buildParams (globGicName [1 ], preBuilder .toString (), ++nextLevel , isRequired , isResp ,
689- registryClasses , projectBuilder , groupClasses , pid , jsonRequest , atomicInteger ));
690- return paramList ;
755+ return buildParams (globGicName [1 ], preBuilder .toString (), ++nextLevel , isRequired , isResp , registryClasses ,
756+ projectBuilder , groupClasses , pid , jsonRequest , atomicInteger );
691757 }
692758
693759 public static String dictionaryListComment (List <EnumDictionary > enumDataDict ) {
0 commit comments