diff --git a/README_CN.md b/README_CN.md
index b7d0825..c905a30 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -50,9 +50,12 @@ smart-doc使用和测试可参考[smart-doc demo](https://gitee.com/devin-alan/a
```
# git clone https://gitee.com/devin-alan/api-doc-test.git
```
-
你可以启动这个Spring Boot的项目,然后访问`http://localhost:8080/doc/api.html`来浏览smart-doc生成的接口文档。
+maven多模块项目请参考
+```
+# git clone https://gitee.com/devin-alan/spring-boot-maven-multiple-module.git
+```
### Add Maven Plugin
smart-doc官方目前已经开发完成[Maven插件](https://gitee.com/smart-doc-team/smart-doc-maven-plugin)
@@ -187,14 +190,16 @@ smart-doc官方目前已经开发完成[Maven插件](https://gitee.com/smart-doc
"desc": "desc",//请求头描述信息
"value":"token请求头的值",//不设置默认null
"required": false,//是否必须
- "since": "-"//什么版本添加的改请求头
+ "since": "-",//什么版本添加的改请求头
+ "pathPatterns": "/app/test/**",//请看https://gitee.com/smart-doc-team/smart-doc/wikis/请求头高级配置?sort_id=4178978
+ "excludePathPatterns":"/app/page/**"//请看https://gitee.com/smart-doc-team/smart-doc/wikis/请求头高级配置?sort_id=4178978
},{
"name": "appkey",//请求头
"type": "string",//请求头类型
"desc": "desc",//请求头描述信息
"value":"appkey请求头的值",//不设置默认null
"required": false,//是否必须
- "urlPatterns": "/test/add;/testConstants/1.0",//正则表达式过滤请求头,url匹配上才会添加该请求头,多个正则用分号隔开
+ "pathPatterns": "/test/add,/testConstants/1.0",//正则表达式过滤请求头,url匹配上才会添加该请求头,多个正则用分号隔开
"since": "-"//什么版本添加的改请求头
}],
"rpcApiDependencies":[{ // 项目开放的dubbo api接口模块依赖,配置后输出到文档方便使用者集成
diff --git a/pom.xml b/pom.xml
index 524c165..8e99531 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,7 +67,7 @@
com.github.shalousun
common-util
- 2.0.6
+ 2.0.8
com.google.code.gson
diff --git a/src/main/java/com/power/doc/builder/PostmanJsonBuilder.java b/src/main/java/com/power/doc/builder/PostmanJsonBuilder.java
index 5a40e48..005a15b 100644
--- a/src/main/java/com/power/doc/builder/PostmanJsonBuilder.java
+++ b/src/main/java/com/power/doc/builder/PostmanJsonBuilder.java
@@ -38,7 +38,7 @@ import com.power.doc.model.postman.request.header.HeaderBean;
import com.power.doc.template.IDocBuildTemplate;
import com.power.doc.template.SpringBootDocBuildTemplate;
import com.power.doc.utils.JsonUtil;
-import com.power.doc.utils.PathUtil;
+import com.power.doc.utils.DocPathUtil;
import com.thoughtworks.qdox.JavaProjectBuilder;
import java.net.MalformedURLException;
@@ -131,7 +131,7 @@ public class PostmanJsonBuilder {
private static UrlBean buildUrlBean(ApiMethodDoc apiMethodDoc) {
UrlBean urlBean = new UrlBean();
String url = Optional.ofNullable(apiMethodDoc.getRequestExample().getUrl()).orElse(apiMethodDoc.getUrl());
- urlBean.setRaw(PathUtil.toPostmanPath(url));
+ urlBean.setRaw(DocPathUtil.toPostmanPath(url));
try {
URL javaUrl = new java.net.URL(apiMethodDoc.getServerUrl());
if (javaUrl.getPort() == -1) {
@@ -154,7 +154,7 @@ public class PostmanJsonBuilder {
urlBean.setPath(paths);
} catch (MalformedURLException e) {
}
- String shortUrl = PathUtil.toPostmanPath(apiMethodDoc.getPath());
+ String shortUrl = DocPathUtil.toPostmanPath(apiMethodDoc.getPath());
String[] paths = shortUrl.split("/");
List pathList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(urlBean.getPath()) && shortUrl.indexOf(urlBean.getPath().get(0)) < 0) {
diff --git a/src/main/java/com/power/doc/model/ApiReqHeader.java b/src/main/java/com/power/doc/model/ApiReqHeader.java
index 5960d0c..4ba464b 100644
--- a/src/main/java/com/power/doc/model/ApiReqHeader.java
+++ b/src/main/java/com/power/doc/model/ApiReqHeader.java
@@ -66,11 +66,17 @@ public class ApiReqHeader {
*/
private String since = "-";
+ /**
+ * @since 2.2.2
+ * Regular expression match request header
+ */
+ private String pathPatterns;
+
/**
* @since 2.2.2
* Regular expression ignore request header
*/
- private String urlPatterns;
+ private String excludePathPatterns;
public static ApiReqHeader builder() {
return new ApiReqHeader();
@@ -130,12 +136,21 @@ public class ApiReqHeader {
return this;
}
- public String getUrlPatterns() {
- return urlPatterns;
+ public String getPathPatterns() {
+ return pathPatterns;
}
- public ApiReqHeader setUrlPatterns(String urlPatterns) {
- this.urlPatterns = urlPatterns;
+ public ApiReqHeader setPathPatterns(String pathPatterns) {
+ this.pathPatterns = pathPatterns;
+ return this;
+ }
+
+ public String getExcludePathPatterns() {
+ return excludePathPatterns;
+ }
+
+ public ApiReqHeader setExcludePathPatterns(String excludePathPatterns) {
+ this.excludePathPatterns = excludePathPatterns;
return this;
}
@@ -167,8 +182,10 @@ public class ApiReqHeader {
.append(required);
sb.append(",\"since\":\"")
.append(since).append('\"');
- sb.append(",\"urlPatterns\":\"")
- .append(urlPatterns).append('\"');
+ sb.append(",\"pathPatterns\":\"")
+ .append(pathPatterns).append('\"');
+ sb.append(",\"excludePathPatterns\":\"")
+ .append(excludePathPatterns).append('\"');
sb.append('}');
return sb.toString();
}
diff --git a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java
index 1f5bd94..d72c61d 100644
--- a/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java
+++ b/src/main/java/com/power/doc/template/SpringBootDocBuildTemplate.java
@@ -225,10 +225,14 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate {
allApiReqHeaders = apiReqHeaders;
}
allApiReqHeaders.removeIf(apiReqHeader -> {
- if (StringUtil.isNotEmpty(apiReqHeader.getUrlPatterns())) {
- return !PathUtil.isMatchUrl(requestMapping.getShortUrl(), apiReqHeader.getUrlPatterns());
+ if (StringUtil.isEmpty(apiReqHeader.getPathPatterns())
+ && StringUtil.isEmpty(apiReqHeader.getExcludePathPatterns())) {
+ return false;
+ } else {
+ boolean flag = DocPathUtil.matches(requestMapping.getShortUrl(), apiReqHeader.getPathPatterns()
+ , apiReqHeader.getExcludePathPatterns());
+ return !flag;
}
- return false;
});
//reduce create in template
apiMethodDoc.setHeaders(this.createDocRenderHeaders(allApiReqHeaders, apiConfig.isAdoc()));
@@ -805,7 +809,7 @@ public class SpringBootDocBuildTemplate implements IDocBuildTemplate {
List queryParams = new ArrayList<>();
List bodyParams = new ArrayList<>();
for (ApiParam param : paramList) {
- param.setValue(StringUtil.removeQuotes(param.getValue()));
+ param.setValue(StringUtil.removeDoubleQuotes(param.getValue()));
if (param.isPathParam()) {
param.setId(pathParams.size() + 1);
pathParams.add(param);
diff --git a/src/main/java/com/power/doc/utils/PathUtil.java b/src/main/java/com/power/doc/utils/DocPathUtil.java
similarity index 66%
rename from src/main/java/com/power/doc/utils/PathUtil.java
rename to src/main/java/com/power/doc/utils/DocPathUtil.java
index 397b6a5..cf4ea26 100644
--- a/src/main/java/com/power/doc/utils/PathUtil.java
+++ b/src/main/java/com/power/doc/utils/DocPathUtil.java
@@ -22,14 +22,15 @@
*/
package com.power.doc.utils;
+import com.power.common.util.PathUtil;
import com.power.common.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
-import java.util.*;
-import java.util.regex.Pattern;
+import java.util.Arrays;
+import java.util.List;
-public class PathUtil {
+public class DocPathUtil {
/**
* Get the java class name
@@ -65,31 +66,22 @@ public class PathUtil {
}
/**
- * match
- * @param url url
- * @param urlPatterns patterns
- * @return true if match
+ * Determine a match for the given lookup path.
+ *
+ * @param lookupPath the request path
+ * @param includePatterns the path patterns to map (empty for matching to all paths)
+ * @param excludePatterns the path patterns to exclude (empty for no specific excludes)
+ * @return {@code true} if matched the request path
*/
- public static boolean isMatchUrl(String url , String urlPatterns){
- List urlPatternList;
- if (StringUtil.isNotEmpty(urlPatterns)) {
- urlPatternList = Arrays.asList(urlPatterns.split(";", 0));
- } else {
- return false;
+ public static boolean matches(String lookupPath, String includePatterns, String excludePatterns) {
+ List includePatternList = null;
+ if (StringUtil.isNotEmpty(includePatterns)) {
+ includePatternList = Arrays.asList(includePatterns.split(",", 0));
}
- for (String str : urlPatternList) {
- if (str.endsWith("/*")) {
- String name = str.substring(0, str.length() - 1);
- if (url.contains(name)) {
- return true;
- }
- } else {
- Pattern pattern = Pattern.compile(str);
- if (pattern.matcher(url).matches()) {
- return true;
- }
- }
+ List excludePatternList = null;
+ if (StringUtil.isNotEmpty(excludePatterns)) {
+ excludePatternList = Arrays.asList(excludePatterns.split(",", 0));
}
- return false;
+ return PathUtil.matches(lookupPath,includePatternList,excludePatternList);
}
}
diff --git a/src/main/java/com/power/doc/utils/JsonUtil.java b/src/main/java/com/power/doc/utils/JsonUtil.java
index 0ffe648..6e1e1df 100644
--- a/src/main/java/com/power/doc/utils/JsonUtil.java
+++ b/src/main/java/com/power/doc/utils/JsonUtil.java
@@ -41,7 +41,7 @@ public class JsonUtil {
public static String toPrettyFormat(String jsonString) {
try {
JsonElement jsonElement = JsonParser.parseString(jsonString);
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
String prettyJson = gson.toJson(jsonElement);
return prettyJson;
} catch (Exception e) {
diff --git a/src/test/java/com/power/doc/util/DocPathUtilTest.java b/src/test/java/com/power/doc/util/DocPathUtilTest.java
new file mode 100644
index 0000000..6542c43
--- /dev/null
+++ b/src/test/java/com/power/doc/util/DocPathUtilTest.java
@@ -0,0 +1,17 @@
+package com.power.doc.util;
+
+import com.power.doc.utils.DocPathUtil;
+import org.junit.Test;
+
+/**
+ * @author yu 2021/6/27.
+ */
+public class DocPathUtilTest {
+
+ @Test
+ public void testMatches() {
+ String pattern = "/app/page/**";
+ String path = "/app/page/{pageIndex}/{pageSize}/{ag}";
+ System.out.println(DocPathUtil.matches(path,null,pattern));
+ }
+}
diff --git a/src/test/java/com/power/doc/util/JsonUtilTest.java b/src/test/java/com/power/doc/util/JsonUtilTest.java
new file mode 100644
index 0000000..4dfc79a
--- /dev/null
+++ b/src/test/java/com/power/doc/util/JsonUtilTest.java
@@ -0,0 +1,16 @@
+package com.power.doc.util;
+
+import com.power.doc.utils.JsonUtil;
+import org.junit.Test;
+
+/**
+ * @author yu 2021/6/27.
+ */
+public class JsonUtilTest {
+
+ @Test
+ public void toPrettyFormat() {
+ String json = "{\"MAX_SPEED\":210,\"gender\":0,\"simpleEnum\":\"RED\",\"username\":\"梓晨.田\",\"password\":\"slujk7\",\"nickName\":\"select * from table where field = 'value'\",\"mobile\":\"17658638153\"}";
+ System.out.println(JsonUtil.toPrettyFormat(json));
+ }
+}