From 986a2135536fd0efcd5b2cba27ac5ecbe3dbe14b Mon Sep 17 00:00:00 2001 From: oppofind <836575280@qq.com> Date: Mon, 30 Nov 2020 23:00:30 +0800 Subject: [PATCH] support group tag --- .../com/power/doc/builder/OpenApiBuilder.java | 6 +++++- .../java/com/power/doc/constants/DocTags.java | 7 ++++++- .../java/com/power/doc/model/ApiMethodDoc.java | 12 ++++++++++++ .../template/SpringBootDocBuildTemplate.java | 18 ++++++++++++------ .../com/power/doc/utils/JavaClassUtil.java | 2 +- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/power/doc/builder/OpenApiBuilder.java b/src/main/java/com/power/doc/builder/OpenApiBuilder.java index ad1eb03..cea1973 100644 --- a/src/main/java/com/power/doc/builder/OpenApiBuilder.java +++ b/src/main/java/com/power/doc/builder/OpenApiBuilder.java @@ -156,7 +156,11 @@ public class OpenApiBuilder { Map request = new HashMap<>(20); request.put("summary", apiMethodDoc.getDesc()); request.put("description", apiMethodDoc.getDetail()); - request.put("tags", new String[]{apiDoc.getDesc()}); + if (StringUtil.isNotEmpty(apiMethodDoc.getGroup())) { + request.put("tags", new String[]{apiMethodDoc.getGroup()}); + } else { + request.put("tags", new String[]{apiDoc.getDesc()}); + } request.put("requestBody", buildRequestBody(apiMethodDoc)); request.put("parameters", buildParameters(apiMethodDoc)); request.put("responses", buildResponses(apiMethodDoc)); diff --git a/src/main/java/com/power/doc/constants/DocTags.java b/src/main/java/com/power/doc/constants/DocTags.java index e3cb958..77848d5 100644 --- a/src/main/java/com/power/doc/constants/DocTags.java +++ b/src/main/java/com/power/doc/constants/DocTags.java @@ -31,7 +31,7 @@ public interface DocTags { String AUTHOR = "author"; /** - * java verion tag + * java version tag */ String VERSION = "version"; @@ -60,6 +60,11 @@ public interface DocTags { */ String ORDER = "order"; + /** + * custom @group tag + */ + String GROUP = "group"; + /** * Ignore ResponseBodyAdvice */ diff --git a/src/main/java/com/power/doc/model/ApiMethodDoc.java b/src/main/java/com/power/doc/model/ApiMethodDoc.java index a3b0de6..99ad887 100644 --- a/src/main/java/com/power/doc/model/ApiMethodDoc.java +++ b/src/main/java/com/power/doc/model/ApiMethodDoc.java @@ -160,6 +160,10 @@ public class ApiMethodDoc implements Serializable { */ private Map requestSchema; + /** + * api group + */ + private String group; public String getMethodId() { return methodId; @@ -346,6 +350,14 @@ public class ApiMethodDoc implements Serializable { this.requestSchema = requestSchema; } + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + @Override public String toString() { final StringBuilder sb = new StringBuilder("{"); diff --git a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java index 9474120..3a1a68c 100644 --- a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java +++ b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java @@ -115,6 +115,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { ProjectDocConfigBuilder projectBuilder) { String clazName = cls.getCanonicalName(); boolean paramsDataToTree = projectBuilder.getApiConfig().isParamsDataToTree(); + String group = JavaClassUtil.getClassTagsValue(cls, DocTags.GROUP, Boolean.TRUE); String classAuthor = JavaClassUtil.getClassTagsValue(cls, DocTags.AUTHOR, Boolean.TRUE); List classAnnotations = cls.getAnnotations(); Map constantsMap = projectBuilder.getConstantsMap(); @@ -158,9 +159,14 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { if (StringUtil.isEmpty(method.getComment()) && apiConfig.isStrict()) { throw new RuntimeException("Unable to find comment for method " + method.getName() + " in " + cls.getCanonicalName()); } - - methodOrder++; ApiMethodDoc apiMethodDoc = new ApiMethodDoc(); + DocletTag docletTag = method.getTagByName(DocTags.GROUP); + if (Objects.nonNull(docletTag)) { + apiMethodDoc.setGroup(docletTag.getValue()); + } else { + apiMethodDoc.setGroup(group); + } + methodOrder++; apiMethodDoc.setName(method.getName()); apiMethodDoc.setOrder(methodOrder); String comment = DocUtil.getEscapeAndCleanComment(method.getComment()); @@ -509,8 +515,8 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { ApiParam param = ApiParam.of().setField(paramName).setType("file") .setId(paramList.size() + 1).setQueryParam(true) .setRequired(true).setVersion(DocGlobalConstants.DEFAULT_VERSION); - if(typeName.contains("[]")){ - comment = comment+"(array of file)"; + if (typeName.contains("[]")) { + comment = comment + "(array of file)"; param.setDesc(comment); param.setHasItems(true); } @@ -608,7 +614,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { } } else if (JavaClassValidateUtil.isMap(fullTypeName)) { log.warning("When using smart-doc, it is not recommended to use Map to receive parameters, Check it in " - + javaMethod.getDeclaringClass().getCanonicalName()+"#"+javaMethod.getName()); + + javaMethod.getDeclaringClass().getCanonicalName() + "#" + javaMethod.getName()); if (DocGlobalConstants.JAVA_MAP_FULLY.equals(typeName)) { ApiParam apiParam = ApiParam.of().setField(paramName).setType("map") @@ -624,7 +630,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate { continue; } String[] gicNameArr = DocClassUtil.getSimpleGicName(typeName); - if(JavaClassValidateUtil.isPrimitive(gicNameArr[1])){ + if (JavaClassValidateUtil.isPrimitive(gicNameArr[1])) { ApiParam apiParam = ApiParam.of().setField(paramName).setType("map") .setId(paramList.size() + 1) .setPathParam(isPathVariable) diff --git a/src/main/java/com/power/doc/utils/JavaClassUtil.java b/src/main/java/com/power/doc/utils/JavaClassUtil.java index 9c8f5c0..6756915 100644 --- a/src/main/java/com/power/doc/utils/JavaClassUtil.java +++ b/src/main/java/com/power/doc/utils/JavaClassUtil.java @@ -369,7 +369,7 @@ public class JavaClassUtil { } return result.toString(); } - return null; + return ""; } /**