diff --git a/CHANGELOG.md b/CHANGELOG.md
index d839a86..50dd3b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
## smart-doc版本
版本小于1.0都属于试用,正式1.0起始发布将会等到文中提到的问题解决后才发布。
+#### 版本号:2.1.5
+- 更新日期: 2020-05-05
+- 更新内容:
+ 1. 修复requestBodyAdvice请求样例丢之。
+ 2. 添加dubbo文档到torna的推送。
#### 版本号:2.1.4
- 更新日期: 2020-04-24
- 更新内容:
diff --git a/pom.xml b/pom.xml
index bb529aa..54ec7f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
smart-doc
jar
- 2.1.4
+ 2.1.5
smart-doc
https://github.com/smart-doc-group/smart-doc.git
diff --git a/src/main/java/com/power/doc/builder/TornaBuilder.java b/src/main/java/com/power/doc/builder/TornaBuilder.java
index ed021f7..b42a1a2 100644
--- a/src/main/java/com/power/doc/builder/TornaBuilder.java
+++ b/src/main/java/com/power/doc/builder/TornaBuilder.java
@@ -34,6 +34,7 @@ import com.power.doc.constants.TornaConstants;
import com.power.doc.model.*;
import com.power.doc.model.torna.*;
import com.power.doc.template.SpringBootDocBuildTemplate;
+import com.power.doc.utils.TornaUtil;
import com.thoughtworks.qdox.JavaProjectBuilder;
import okhttp3.*;
import org.apache.commons.lang3.StringUtils;
@@ -47,6 +48,7 @@ import java.util.concurrent.TimeUnit;
import static com.power.doc.constants.TornaConstants.CATEGORY_CREATE;
import static com.power.doc.constants.TornaConstants.PUSH;
+import static com.power.doc.utils.TornaUtil.*;
/**
@@ -87,212 +89,24 @@ public class TornaBuilder {
* @param apiConfig ApiConfig
*/
public static void buildTorna(List apiDocs, ApiConfig apiConfig) {
-
- //是否设置测试环境
- boolean hasDebugEnv = StringUtils.isNotBlank(apiConfig.getDebugEnvName())
- &&
- StringUtils.isNotBlank(apiConfig.getDebugEnvUrl());
-
- if (apiConfig.isTornaDebug()) {
- String sb = "配置信息列表: \n" +
- "OpenUrl: " +
- apiConfig.getOpenUrl() +
- "\n" +
- "appToken: " +
- apiConfig.getAppToken() +
- "\n" +
- "appKey: " +
- apiConfig.getAppKey() +
- "\n" +
- "Secret: " +
- apiConfig.getSecret() +
- "\n";
- System.out.println(sb);
- }
TornaApi tornaApi = new TornaApi();
- //设置测试环境
- List debugEnvs = new ArrayList<>();
- if (hasDebugEnv) {
- DebugEnv debugEnv = new DebugEnv();
- debugEnv.setName(apiConfig.getDebugEnvName());
- debugEnv.setUrl(apiConfig.getDebugEnvUrl());
- debugEnvs.add(debugEnv);
-
- }
- //
Apis api;
List apisList = new ArrayList<>();
//添加接口数据
for (ApiDoc a : apiDocs) {
api = new Apis();
api.setName(StringUtils.isBlank(a.getDesc()) ? a.getName() : a.getDesc());
- api.setItems(buildApis(a, hasDebugEnv));
+ api.setItems(buildApis(a.getList(), TornaUtil.setDebugEnv(apiConfig,tornaApi)));
api.setIsFolder(TornaConstants.YES);
apisList.add(api);
}
- tornaApi.setDebugEnvs(debugEnvs);
tornaApi.setApis(apisList);
//推送文档信息
- Map requestJson =
- TornaConstants.buildParams(PUSH, new Gson().toJson(tornaApi), apiConfig);
+ Map requestJson = TornaConstants.buildParams(PUSH, new Gson().toJson(tornaApi), apiConfig);
//获取返回结果
String responseMsg = OkHttp3Util.syncPostJson(apiConfig.getOpenUrl(), new Gson().toJson(requestJson));
//开启调试时打印请求信息
- if (apiConfig.isTornaDebug()) {
- JsonElement element = JsonParser.parseString(responseMsg);
- TornaRequestInfo info = new TornaRequestInfo()
- .of()
- .setCategory(PUSH)
- .setCode(element.getAsJsonObject().get(TornaConstants.CODE).getAsString())
- .setMessage(element.getAsJsonObject().get(TornaConstants.MESSAGE).getAsString())
- .setRequestInfo(requestJson)
- .setResponseInfo(responseMsg);
- System.out.println(info.buildInfo());
- }
+ TornaUtil.printDebugInfo(apiConfig,responseMsg,requestJson);
}
-
- /**
- * build apis
- * @param a api
- * @param hasDebugEnv has debug environment
- * @return List of Api
- */
- public static List buildApis(ApiDoc a, boolean hasDebugEnv) {
- List apiMethodDocs = a.getList();
- //参数列表
- List apis = new ArrayList<>();
- Apis methodApi;
- //遍历分类接口
- for (ApiMethodDoc apiMethodDoc : apiMethodDocs) {
- /**
- * "name": "获取商品信息",
- * "description": "获取商品信息",
- * "url": "/goods/get",
- * "httpMethod": "GET",
- * "contentType": "application/json",
- * "isFolder": "1",
- * "parentId": "",
- * "isShow": "1",
- */
- methodApi = new Apis();
- methodApi.setIsFolder(TornaConstants.NO);
- methodApi.setName(apiMethodDoc.getDesc());
- methodApi.setUrl(hasDebugEnv ? apiMethodDoc.getPath() : apiMethodDoc.getUrl());
- methodApi.setHttpMethod(apiMethodDoc.getType());
- methodApi.setContentType(apiMethodDoc.getContentType());
- methodApi.setDescription(apiMethodDoc.getDetail());
- methodApi.setIsShow(TornaConstants.YES);
-
- /**
- * {
- * "name": "goodsName",
- * "type": "string",
- * "required": "1",
- * "maxLength": "128",
- * "example": "iphone12",
- * "description": "商品名称描述",
- * "parentId": "",
- * "enumInfo": {
- * "name": "支付枚举",
- * "description": "支付状态",
- * "items": [
- * {
- * "name": "WAIT_PAY",
- * "type": "string",
- * "value": "0",
- * "description": "未支付"
- * }
- * ]
- * }
- * }
- */
- methodApi.setHeaderParams(buildHerder(apiMethodDoc.getRequestHeaders()));
- methodApi.setResponseParams(buildParams(apiMethodDoc.getResponseParams()));
- //Path
- if (CollectionUtil.isNotEmpty(apiMethodDoc.getPathParams())) {
- methodApi.setPathParams(buildParams(apiMethodDoc.getPathParams()));
- }
- //formData
- if (CollectionUtil.isNotEmpty(apiMethodDoc.getQueryParams())) {
- methodApi.setRequestParams(buildParams(apiMethodDoc.getQueryParams()));
- }
- //Json
- if (CollectionUtil.isNotEmpty(apiMethodDoc.getRequestParams())) {
- methodApi.setRequestParams(buildParams(apiMethodDoc.getRequestParams()));
- }
- apis.add(methodApi);
- }
- return apis;
- }
-
- /**
- * build request header
- *
- * @param apiReqHeaders 请求头参数列表
- * @return List of HttpParam
- */
- public static List buildHerder(List apiReqHeaders) {
- /**
- * name": "token",
- * "required": "1",
- * "example": "iphone12",
- * "description": "商品名称描述"
- */
- HttpParam httpParam;
- List headers = new ArrayList<>();
- for (ApiReqHeader header : apiReqHeaders) {
- httpParam = new HttpParam();
- httpParam.setName(header.getName());
- httpParam.setRequired(header.isRequired() ? TornaConstants.YES : TornaConstants.NO);
- httpParam.setExample(StringUtil.removeQuotes(header.getValue()));
- httpParam.setDescription(header.getDesc());
- headers.add(httpParam);
- }
- return headers;
- }
-
- /**
- * build request response params
- *
- * @param apiParams 参数列表
- * @return List of HttpParam
- */
- public static List buildParams(List apiParams) {
- HttpParam httpParam;
- List bodies = new ArrayList<>();
- /**
- * "name": "goodsName",
- * "type": "string",
- * "required": "1",
- * "maxLength": "128",
- * "example": "iphone12",
- * "description": "商品名称描述",
- * "parentId": "",
- * "enumInfo": {
- * "name": "支付枚举",
- * "description": "支付状态",
- * "items": [
- * {
- * "name": "WAIT_PAY",
- * "type": "string",
- * "value": "0",
- * "description": "未支付"
- */
- for (ApiParam apiParam : apiParams) {
- httpParam = new HttpParam();
- httpParam.setName(apiParam.getField());
- httpParam.setMaxLength(apiParam.getMaxLength());
- httpParam.setType(apiParam.getType());
- httpParam.setRequired(apiParam.isRequired() ? TornaConstants.YES : TornaConstants.NO);
- httpParam.setExample(StringUtil.removeQuotes(apiParam.getValue()));
- httpParam.setDescription(apiParam.getDesc());
- if (apiParam.getChildren() != null) {
- httpParam.setChildren(buildParams(apiParam.getChildren()));
- }
- bodies.add(httpParam);
- }
- return bodies;
- }
-
}
diff --git a/src/main/java/com/power/doc/builder/rpc/RpcTornaBuilder.java b/src/main/java/com/power/doc/builder/rpc/RpcTornaBuilder.java
new file mode 100644
index 0000000..05ee855
--- /dev/null
+++ b/src/main/java/com/power/doc/builder/rpc/RpcTornaBuilder.java
@@ -0,0 +1,83 @@
+package com.power.doc.builder.rpc;
+
+import com.google.gson.Gson;
+import com.power.common.util.OkHttp3Util;
+import com.power.doc.builder.ProjectDocConfigBuilder;
+import com.power.doc.constants.TornaConstants;
+import com.power.doc.model.ApiConfig;
+import com.power.doc.model.rpc.RpcApiDoc;
+import com.power.doc.model.torna.Apis;
+import com.power.doc.model.torna.DubboInfo;
+import com.power.doc.model.torna.TornaApi;
+import com.power.doc.template.RpcDocBuildTemplate;
+import com.power.doc.utils.TornaUtil;
+import com.thoughtworks.qdox.JavaProjectBuilder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static com.power.doc.constants.TornaConstants.PUSH;
+import static com.power.doc.utils.TornaUtil.buildDubboApis;
+
+/**
+ * @author xingzi 2021/4/28 16:14
+ **/
+public class RpcTornaBuilder {
+
+ /**
+ * build controller api
+ *
+ * @param config config
+ */
+ public static void buildApiDoc(ApiConfig config) {
+ JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
+ buildApiDoc(config, javaProjectBuilder);
+ }
+
+
+ /**
+ * Only for smart-doc maven plugin and gradle plugin.
+ *
+ * @param config ApiConfig
+ * @param javaProjectBuilder ProjectDocConfigBuilder
+ */
+ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
+ config.setParamsDataToTree(true);
+ RpcDocBuilderTemplate builderTemplate = new RpcDocBuilderTemplate();
+ builderTemplate.checkAndInit(config);
+ ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
+ RpcDocBuildTemplate docBuildTemplate = new RpcDocBuildTemplate();
+ List apiDocList = docBuildTemplate.getApiData(configBuilder);
+ buildTorna(apiDocList, config);
+ }
+
+ public static void buildTorna(List apiDocs, ApiConfig apiConfig) {
+ TornaApi tornaApi = new TornaApi();
+ Apis api;
+ List apisList = new ArrayList<>();
+ //添加接口数据
+ for (RpcApiDoc a : apiDocs) {
+ api = new Apis();
+ api.setName(StringUtils.isBlank(a.getDesc()) ? a.getName() : a.getDesc());
+ TornaUtil.setDebugEnv(apiConfig,tornaApi);
+ api.setItems(buildDubboApis(a.getList()));
+ api.setIsFolder(TornaConstants.YES);
+ api.setDubboInfo(new DubboInfo().builder()
+ .setAuthor(a.getAuthor())
+ .setProtocol(a.getProtocol())
+ .setVersion(a.getVersion())
+ .setDependency(TornaUtil.buildDependencies(apiConfig.getRpcApiDependencies()))
+ .setInterfaceName(a.getName()));
+ apisList.add(api);
+ }
+ tornaApi.setApis(apisList);
+ //推送文档信息
+ Map requestJson = TornaConstants.buildParams(PUSH, new Gson().toJson(tornaApi), apiConfig);
+ //获取返回结果
+ String responseMsg = OkHttp3Util.syncPostJson(apiConfig.getOpenUrl(), new Gson().toJson(requestJson));
+ //开启调试时打印请求信息
+ TornaUtil.printDebugInfo(apiConfig,responseMsg,requestJson);
+ }
+}
diff --git a/src/main/java/com/power/doc/model/ApiConfig.java b/src/main/java/com/power/doc/model/ApiConfig.java
index 517c670..440d517 100644
--- a/src/main/java/com/power/doc/model/ApiConfig.java
+++ b/src/main/java/com/power/doc/model/ApiConfig.java
@@ -321,7 +321,7 @@ public class ApiConfig {
/**
* torna调试开关
*/
- private boolean tornaDebug;
+ private boolean tornaDebug = true;
/**
* 是否为dubbo
*/
diff --git a/src/main/java/com/power/doc/model/rpc/RpcApiDependency.java b/src/main/java/com/power/doc/model/rpc/RpcApiDependency.java
index 36e4fb9..0dc581e 100644
--- a/src/main/java/com/power/doc/model/rpc/RpcApiDependency.java
+++ b/src/main/java/com/power/doc/model/rpc/RpcApiDependency.java
@@ -63,4 +63,13 @@ public class RpcApiDependency {
this.version = version;
return this;
}
+
+ @Override
+ public String toString() {
+ return ""+"\r"+
+ "\t"+"" + groupId + "" +"\n"+
+ "\t"+"" + artifactId + "" +"\n"+
+ "\t"+ "" + version + "" +""+
+ "\r"+"";
+ }
}
diff --git a/src/main/java/com/power/doc/model/torna/Apis.java b/src/main/java/com/power/doc/model/torna/Apis.java
index debec17..6055440 100644
--- a/src/main/java/com/power/doc/model/torna/Apis.java
+++ b/src/main/java/com/power/doc/model/torna/Apis.java
@@ -36,6 +36,7 @@ public class Apis {
private String isFolder;
private String parentId;
private String isShow;
+ private DubboInfo dubboInfo;
private List headerParams;
private List pathParams;
private List requestParams;
@@ -153,6 +154,14 @@ public class Apis {
return items;
}
+ public DubboInfo getDubboInfo() {
+ return dubboInfo;
+ }
+
+ public void setDubboInfo(DubboInfo dubboInfo) {
+ this.dubboInfo = dubboInfo;
+ }
+
public void setItems(List items) {
this.items = items;
}
diff --git a/src/main/java/com/power/doc/model/torna/DubboInfo.java b/src/main/java/com/power/doc/model/torna/DubboInfo.java
new file mode 100644
index 0000000..bec357d
--- /dev/null
+++ b/src/main/java/com/power/doc/model/torna/DubboInfo.java
@@ -0,0 +1,71 @@
+package com.power.doc.model.torna;
+
+/**
+ * @author xingzi 2021/4/28 12:54
+ **/
+public class DubboInfo {
+ private String interfaceName;
+ private String author;
+ private String version;
+ private String protocol;
+ private String dependency;
+
+ public DubboInfo builder(){
+ return new DubboInfo();
+ }
+ public String getInterfaceName() {
+ return interfaceName;
+ }
+
+ public DubboInfo setInterfaceName(String interfaceName) {
+ this.interfaceName = interfaceName;
+ return this;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public DubboInfo setAuthor(String author) {
+ this.author = author;
+ return this;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public DubboInfo setVersion(String version) {
+ this.version = version;
+ return this;
+ }
+
+ public String getProtocol() {
+ return protocol;
+ }
+
+ public DubboInfo setProtocol(String protocol) {
+ this.protocol = protocol;
+ return this;
+ }
+
+ public String getDependency() {
+ return dependency;
+ }
+
+ public DubboInfo setDependency(String dependency) {
+ this.dependency = dependency;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return "DubboInfo{" +
+ "interfaceName='" + interfaceName + '\'' +
+ ", author='" + author + '\'' +
+ ", version='" + version + '\'' +
+ ", protocol='" + protocol + '\'' +
+ ", dependency='" + dependency + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java
index 3d92c3d..b92bd68 100644
--- a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java
+++ b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java
@@ -368,14 +368,9 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate {
if (Objects.nonNull(configBuilder.getApiConfig().getRequestBodyAdvice())
&& Objects.isNull(method.getTagByName(IGNORE_REQUEST_BODY_ADVICE))) {
String requestBodyAdvice = configBuilder.getApiConfig().getRequestBodyAdvice().getClassName();
- gicTypeName = new StringBuffer()
- .append(requestBodyAdvice)
- .append("<")
- .append(gicTypeName).append(">").toString();
- typeName = new StringBuffer()
- .append(requestBodyAdvice)
- .append("<")
- .append(typeName).append(">").toString();
+ typeName = configBuilder.getApiConfig().getRequestBodyAdvice().getClassName();
+ gicTypeName = requestBodyAdvice + "<" + gicTypeName + ">";
+
}
if (JavaClassValidateUtil.isPrimitive(simpleTypeName)) {
@@ -663,6 +658,12 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate {
throw new RuntimeException("You have use @RequestBody Passing multiple variables for method "
+ javaMethod.getName() + " in " + className + ",@RequestBody annotation could only bind one variables.");
}
+ if (Objects.nonNull(builder.getApiConfig().getRequestBodyAdvice())
+ && Objects.isNull(javaMethod.getTagByName(IGNORE_REQUEST_BODY_ADVICE))) {
+ String requestBodyAdvice = builder.getApiConfig().getRequestBodyAdvice().getClassName();
+ fullTypeName = typeName = requestBodyAdvice + "<" + typeName + ">";
+
+ }
requestBodyCounter++;
isRequestBody = true;
}
diff --git a/src/main/java/com/power/doc/utils/JavaClassUtil.java b/src/main/java/com/power/doc/utils/JavaClassUtil.java
index b6a7704..cd81a42 100644
--- a/src/main/java/com/power/doc/utils/JavaClassUtil.java
+++ b/src/main/java/com/power/doc/utils/JavaClassUtil.java
@@ -508,7 +508,8 @@ public class JavaClassUtil {
c = c.getSuperclass();
}
} catch (ClassNotFoundException e) {
- e.printStackTrace();
+ e.getMessage();
+ return false;
}
return false;
}
diff --git a/src/main/java/com/power/doc/utils/JavaClassValidateUtil.java b/src/main/java/com/power/doc/utils/JavaClassValidateUtil.java
index e563950..f45cc8a 100644
--- a/src/main/java/com/power/doc/utils/JavaClassValidateUtil.java
+++ b/src/main/java/com/power/doc/utils/JavaClassValidateUtil.java
@@ -235,6 +235,7 @@ public class JavaClassValidateUtil {
case "javax.servlet.http.HttpServletResponse":
case "org.springframework.web.reactive.function.server.ServerRequest":
case "org.springframework.web.multipart.MultipartHttpServletRequest":
+ case "org.springframework.http.HttpHeaders":
return true;
default:
return false;
diff --git a/src/main/java/com/power/doc/utils/TornaUtil.java b/src/main/java/com/power/doc/utils/TornaUtil.java
new file mode 100644
index 0000000..fa06ba5
--- /dev/null
+++ b/src/main/java/com/power/doc/utils/TornaUtil.java
@@ -0,0 +1,284 @@
+package com.power.doc.utils;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+import com.power.common.util.CollectionUtil;
+import com.power.common.util.StringUtil;
+import com.power.doc.constants.TornaConstants;
+import com.power.doc.model.*;
+import com.power.doc.model.rpc.RpcApiDependency;
+import com.power.doc.model.torna.*;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static com.power.doc.constants.TornaConstants.PUSH;
+
+/**
+ * @author xingzi 2021/4/28 16:15
+ **/
+public class TornaUtil {
+
+ public static boolean setDebugEnv(ApiConfig apiConfig, TornaApi tornaApi) {
+ //是否设置测试环境
+ boolean hasDebugEnv = StringUtils.isNotBlank(apiConfig.getDebugEnvName())
+ &&
+ StringUtils.isNotBlank(apiConfig.getDebugEnvUrl());
+ //设置测试环境
+ List debugEnvs = new ArrayList<>();
+ if (hasDebugEnv) {
+ DebugEnv debugEnv = new DebugEnv();
+ debugEnv.setName(apiConfig.getDebugEnvName());
+ debugEnv.setUrl(apiConfig.getDebugEnvUrl());
+ debugEnvs.add(debugEnv);
+ }
+ tornaApi.setDebugEnvs(debugEnvs);
+ return hasDebugEnv;
+ }
+
+ public static void printDebugInfo(ApiConfig apiConfig, String responseMsg, Map requestJson) {
+ if (apiConfig.isTornaDebug()) {
+ String sb = "配置信息列表: \n" +
+ "OpenUrl: " +
+ apiConfig.getOpenUrl() +
+ "\n" +
+ "appToken: " +
+ apiConfig.getAppToken() +
+ "\n" +
+ "appKey: " +
+ apiConfig.getAppKey() +
+ "\n" +
+ "Secret: " +
+ apiConfig.getSecret() +
+ "\n";
+ System.out.println(sb);
+ JsonElement element = JsonParser.parseString(responseMsg);
+ TornaRequestInfo info = new TornaRequestInfo()
+ .of()
+ .setCategory(PUSH)
+ .setCode(element.getAsJsonObject().get(TornaConstants.CODE).getAsString())
+ .setMessage(element.getAsJsonObject().get(TornaConstants.MESSAGE).getAsString())
+ .setRequestInfo(requestJson)
+ .setResponseInfo(responseMsg);
+ System.out.println(info.buildInfo());
+ }
+ }
+
+ /**
+ * build apis
+ *
+ * @param apiMethodDocs apiMethodDocs
+ * @param hasDebugEnv has debug environment
+ * @return List of Api
+ */
+ public static List buildApis(List apiMethodDocs, boolean hasDebugEnv) {
+ //参数列表
+ List apis = new ArrayList<>();
+ Apis methodApi;
+ //遍历分类接口
+ for (ApiMethodDoc apiMethodDoc : apiMethodDocs) {
+ /**
+ * "name": "获取商品信息",
+ * "description": "获取商品信息",
+ * "url": "/goods/get",
+ * "httpMethod": "GET",
+ * "contentType": "application/json",
+ * "isFolder": "1",
+ * "parentId": "",
+ * "isShow": "1",
+ */
+ methodApi = new Apis();
+ methodApi.setIsFolder(TornaConstants.NO);
+ methodApi.setName(apiMethodDoc.getDesc());
+ methodApi.setUrl(hasDebugEnv ? apiMethodDoc.getPath() : apiMethodDoc.getUrl());
+ methodApi.setHttpMethod(apiMethodDoc.getType());
+ methodApi.setContentType(apiMethodDoc.getContentType());
+ methodApi.setDescription(apiMethodDoc.getDetail());
+ methodApi.setIsShow(TornaConstants.YES);
+
+ /**
+ * {
+ * "name": "goodsName",
+ * "type": "string",
+ * "required": "1",
+ * "maxLength": "128",
+ * "example": "iphone12",
+ * "description": "商品名称描述",
+ * "parentId": "",
+ * "enumInfo": {
+ * "name": "支付枚举",
+ * "description": "支付状态",
+ * "items": [
+ * {
+ * "name": "WAIT_PAY",
+ * "type": "string",
+ * "value": "0",
+ * "description": "未支付"
+ * }
+ * ]
+ * }
+ * }
+ */
+ methodApi.setHeaderParams(buildHerder(apiMethodDoc.getRequestHeaders()));
+ methodApi.setResponseParams(buildParams(apiMethodDoc.getResponseParams()));
+ //Path
+ if (CollectionUtil.isNotEmpty(apiMethodDoc.getPathParams())) {
+ methodApi.setPathParams(buildParams(apiMethodDoc.getPathParams()));
+ }
+ //formData
+ if (CollectionUtil.isNotEmpty(apiMethodDoc.getQueryParams())) {
+ methodApi.setRequestParams(buildParams(apiMethodDoc.getQueryParams()));
+ }
+ //Json
+ if (CollectionUtil.isNotEmpty(apiMethodDoc.getRequestParams())) {
+ methodApi.setRequestParams(buildParams(apiMethodDoc.getRequestParams()));
+ }
+ apis.add(methodApi);
+ }
+ return apis;
+ }
+
+ /**
+ * build apis
+ *
+ * @param apiMethodDocs apiMethodDocs
+ * @return List of Api
+ */
+ public static List buildDubboApis(List apiMethodDocs) {
+ //参数列表
+ List apis = new ArrayList<>();
+ Apis methodApi;
+ //遍历分类接口
+ for (JavaMethodDoc apiMethodDoc : apiMethodDocs) {
+ /**
+ * "name": "获取商品信息",
+ * "description": "获取商品信息",
+ * "url": "/goods/get",
+ * "httpMethod": "GET",
+ * "contentType": "application/json",
+ * "isFolder": "1",
+ * "parentId": "",
+ * "isShow": "1",
+ */
+ methodApi = new Apis();
+ methodApi.setIsFolder(TornaConstants.NO);
+ methodApi.setName(apiMethodDoc.getDesc());
+ methodApi.setDescription(apiMethodDoc.getDetail());
+ methodApi.setIsShow(TornaConstants.YES);
+ methodApi.setUrl(apiMethodDoc.getMethodDefinition());
+
+ /**
+ * {
+ * "name": "goodsName",
+ * "type": "string",
+ * "required": "1",
+ * "maxLength": "128",
+ * "example": "iphone12",
+ * "description": "商品名称描述",
+ * "parentId": "",
+ * "enumInfo": {
+ * "name": "支付枚举",
+ * "description": "支付状态",
+ * "items": [
+ * {
+ * "name": "WAIT_PAY",
+ * "type": "string",
+ * "value": "0",
+ * "description": "未支付"
+ * }
+ * ]
+ * }
+ * }
+ */
+ methodApi.setResponseParams(buildParams(apiMethodDoc.getResponseParams()));
+ //Json
+ if (CollectionUtil.isNotEmpty(apiMethodDoc.getRequestParams())) {
+ methodApi.setRequestParams(buildParams(apiMethodDoc.getRequestParams()));
+ }
+ apis.add(methodApi);
+ }
+ return apis;
+ }
+
+ /**
+ * build request header
+ *
+ * @param apiReqHeaders 请求头参数列表
+ * @return List of HttpParam
+ */
+ public static List buildHerder(List apiReqHeaders) {
+ /**
+ * name": "token",
+ * "required": "1",
+ * "example": "iphone12",
+ * "description": "商品名称描述"
+ */
+ HttpParam httpParam;
+ List headers = new ArrayList<>();
+ for (ApiReqHeader header : apiReqHeaders) {
+ httpParam = new HttpParam();
+ httpParam.setName(header.getName());
+ httpParam.setRequired(header.isRequired() ? TornaConstants.YES : TornaConstants.NO);
+ httpParam.setExample(StringUtil.removeQuotes(header.getValue()));
+ httpParam.setDescription(header.getDesc());
+ headers.add(httpParam);
+ }
+ return headers;
+ }
+
+ /**
+ * build request response params
+ *
+ * @param apiParams 参数列表
+ * @return List of HttpParam
+ */
+ public static List buildParams(List apiParams) {
+ HttpParam httpParam;
+ List bodies = new ArrayList<>();
+ /**
+ * "name": "goodsName",
+ * "type": "string",
+ * "required": "1",
+ * "maxLength": "128",
+ * "example": "iphone12",
+ * "description": "商品名称描述",
+ * "parentId": "",
+ * "enumInfo": {
+ * "name": "支付枚举",
+ * "description": "支付状态",
+ * "items": [
+ * {
+ * "name": "WAIT_PAY",
+ * "type": "string",
+ * "value": "0",
+ * "description": "未支付"
+ */
+ for (ApiParam apiParam : apiParams) {
+ httpParam = new HttpParam();
+ httpParam.setName(apiParam.getField());
+ httpParam.setMaxLength(apiParam.getMaxLength());
+ httpParam.setType(apiParam.getType());
+ httpParam.setRequired(apiParam.isRequired() ? TornaConstants.YES : TornaConstants.NO);
+ httpParam.setExample(StringUtil.removeQuotes(apiParam.getValue()));
+ httpParam.setDescription(apiParam.getDesc());
+ if (apiParam.getChildren() != null) {
+ httpParam.setChildren(buildParams(apiParam.getChildren()));
+ }
+ bodies.add(httpParam);
+ }
+ return bodies;
+ }
+
+ public static String buildDependencies(List dependencies) {
+ StringBuilder s = new StringBuilder();
+ if (CollectionUtil.isNotEmpty(dependencies)) {
+ for (RpcApiDependency r : dependencies) {
+ s.append(r.toString())
+ .append("\n\n");
+ }
+ }
+ return s.toString();
+ }
+}
diff --git a/src/test/java/com/power/doc/ApiDocTest.java b/src/test/java/com/power/doc/ApiDocTest.java
index 4d44f54..a6fdd60 100644
--- a/src/test/java/com/power/doc/ApiDocTest.java
+++ b/src/test/java/com/power/doc/ApiDocTest.java
@@ -5,8 +5,11 @@ import com.power.doc.builder.HtmlApiDocBuilder;
import com.power.doc.builder.OpenApiBuilder;
import com.power.doc.builder.PostmanJsonBuilder;
import com.power.doc.builder.TornaBuilder;
+import com.power.doc.builder.rpc.RpcHtmlBuilder;
+import com.power.doc.builder.rpc.RpcTornaBuilder;
import com.power.doc.enums.OrderEnum;
import com.power.doc.model.*;
+import com.power.doc.model.rpc.RpcApiDependency;
import org.junit.Test;
import java.io.UnsupportedEncodingException;
@@ -30,15 +33,15 @@ public class ApiDocTest {
list.add("aa");
list.contains("aa");
ApiConfig config = new ApiConfig();
- config.setServerUrl("http://localhost:8080");
+ config.setServerUrl("http://127.0.0.1:8899");
//config.setStrict(true);
- config.setOpenUrl("http://torna.opensphere.cn/api/");
+ config.setOpenUrl("http://127.0.0.1:8899/api");
config.setAppKey("20201216788835306945118208");
- config.setAppToken("2f9a7d3858a147b7845ebb48785d4dc7");
+ config.setAppToken("c16931fa6590483fb7a4e85340fcbfef");
config.setSecret("W.ZyGMOB9Q0UqujVxnfi@.I#V&tUUYZR");
config.setDebugEnvName("测试环境");
config.setDebugEnvUrl("http://127.0.0.1");
- config.setTornaDebug(true);
+ //config.setTornaDebug(true);
config.setAllInOne(true);
config.setOutPath("d:\\md3");
@@ -51,7 +54,7 @@ public class ApiDocTest {
//SourcePath.path().setPath("F:\\Personal\\project\\smart\\src\\main\\java")
//SourcePath.path().setDesc("加载项目外代码").setPath("E:\\ApplicationPower\\ApplicationPower\\Common-util\\src\\main\\java")
);
- config.setPackageFilters("com.power.doc.controller.UserController");
+ config.setPackageFilters("com.power.doc.dubbo.*");
config.setDataDictionaries(
ApiDataDictionary.builder().setTitle("订单字典").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc")
);
@@ -78,23 +81,31 @@ public class ApiDocTest {
);
- config.setPackageFilters("com.power.doc.controller.UserController");
+ config.setPackageFilters("com.power.doc.dubbo.*,com.power.doc.controller.UserController");
//非必须只有当setAllInOne设置为true时文档变更记录才生效,https://gitee.com/sunyurepository/ApplicationPower/issues/IPS4O
config.setRevisionLogs(
RevisionLog.builder().setRevisionTime("2018/12/15").setAuthor("chen").setRemarks("测试").setStatus("创建").setVersion("V1.0"),
RevisionLog.builder().setRevisionTime("2018/12/16").setAuthor("chen2").setRemarks("测试2").setStatus("修改").setVersion("V2.0")
);
-// config.setResponseBodyAdvice(ResponseBodyAdvice.builder()
-// .setDataField("data")
-// .setDataField("dadada")
-// .setClassName("com.power.common.model.CommonResult"));
-
-
+ config.setResponseBodyAdvice(BodyAdvice.builder()
+ .setDataField("data")
+ .setDataField("dadada")
+ .setClassName("com.power.common.model.CommonResult"));
+ config.setRequestBodyAdvice(BodyAdvice.builder()
+ .setDataField("data")
+ .setDataField("dadada")
+ .setClassName("com.power.common.model.CommonResult"));
+ config.setRpcApiDependencies(RpcApiDependency.builder().setGroupId("com.test").setArtifactId("test1").setVersion("1.0"),
+ RpcApiDependency.builder().setGroupId("com.smart").setArtifactId("test").setVersion("1.1.1")
+ );
long start = System.currentTimeMillis();
//TornaBuilder.buildApiDoc(config);
//OpenApiBuilder.buildOpenApi(config);
HtmlApiDocBuilder.buildApiDoc(config);
+ //RpcTornaBuilder.buildApiDoc(config);
+ TornaBuilder.buildApiDoc(config);
+ // RpcHtmlBuilder.buildApiDoc(config);
long end = System.currentTimeMillis();
DateTimeUtil.printRunTime(end, start);
}