Skip to content
This repository was archived by the owner on Dec 4, 2025. It is now read-only.

Commit 28645da

Browse files
committed
refactor(url): Refactor URL-related code
- Use `DocGlobalConstants.PATH_DELIMITER` instead of hard-coded "/" - Optimize URL concatenation logic in multiple places - Standardize the handling of path separators
1 parent 6360b3d commit 28645da

12 files changed

Lines changed: 153 additions & 39 deletions

src/main/java/com/ly/doc/builder/PostmanJsonBuilder.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@
2525
import com.ly.doc.constants.Methods;
2626
import com.ly.doc.factory.BuildTemplateFactory;
2727
import com.ly.doc.helper.JavaProjectBuilderHelper;
28-
import com.ly.doc.model.*;
28+
import com.ly.doc.model.ApiConfig;
29+
import com.ly.doc.model.ApiDoc;
30+
import com.ly.doc.model.ApiMethodDoc;
31+
import com.ly.doc.model.ApiParam;
32+
import com.ly.doc.model.ApiReqParam;
33+
import com.ly.doc.model.FormData;
2934
import com.ly.doc.model.postman.InfoBean;
3035
import com.ly.doc.model.postman.ItemBean;
3136
import com.ly.doc.model.postman.RequestItem;
@@ -42,7 +47,11 @@
4247
import com.power.common.util.StringUtil;
4348
import com.thoughtworks.qdox.JavaProjectBuilder;
4449

45-
import java.util.*;
50+
import java.util.ArrayList;
51+
import java.util.Arrays;
52+
import java.util.List;
53+
import java.util.Objects;
54+
import java.util.Optional;
4655

4756
/**
4857
* Postman Json Builder
@@ -151,7 +160,7 @@ private static UrlBean buildUrlBean(ApiMethodDoc apiMethodDoc) {
151160
String shortUrl = DocPathUtil.toPostmanPath(apiMethodDoc.getPath());
152161
String[] paths;
153162
if (StringUtil.isNotEmpty(shortUrl)) {
154-
paths = shortUrl.split("/");
163+
paths = shortUrl.split(DocGlobalConstants.PATH_DELIMITER);
155164
}
156165
else {
157166
paths = new String[0];
@@ -161,7 +170,7 @@ private static UrlBean buildUrlBean(ApiMethodDoc apiMethodDoc) {
161170
// Add server path
162171
if (CollectionUtil.isNotEmpty(urlBean.getPath()) && StringUtil.isNotEmpty(shortUrl)
163172
&& !shortUrl.contains(serverPath)) {
164-
String[] serverPaths = serverPath.split("/");
173+
String[] serverPaths = serverPath.split(DocGlobalConstants.PATH_DELIMITER);
165174
pathList.addAll(Arrays.asList(serverPaths));
166175
}
167176
// Add mapping path
@@ -170,7 +179,7 @@ private static UrlBean buildUrlBean(ApiMethodDoc apiMethodDoc) {
170179
pathList.add(str);
171180
}
172181
}
173-
if (StringUtil.isNotEmpty(shortUrl) && shortUrl.endsWith("/")) {
182+
if (StringUtil.isNotEmpty(shortUrl) && shortUrl.endsWith(DocGlobalConstants.PATH_DELIMITER)) {
174183
pathList.add("");
175184
}
176185

src/main/java/com/ly/doc/builder/ProjectDocConfigBuilder.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,15 @@
2424
import com.ly.doc.constants.HighLightJsConstants;
2525
import com.ly.doc.constants.HighlightStyle;
2626
import com.ly.doc.helper.JavaProjectBuilderHelper;
27-
import com.ly.doc.model.*;
27+
import com.ly.doc.model.ApiConfig;
28+
import com.ly.doc.model.ApiConstant;
29+
import com.ly.doc.model.ApiDataDictionary;
30+
import com.ly.doc.model.ApiErrorCodeDictionary;
31+
import com.ly.doc.model.ApiObjectReplacement;
32+
import com.ly.doc.model.BodyAdvice;
33+
import com.ly.doc.model.CustomField;
34+
import com.ly.doc.model.DocJavaField;
35+
import com.ly.doc.model.SourceCodePath;
2836
import com.ly.doc.utils.JavaClassUtil;
2937
import com.power.common.constants.Charset;
3038
import com.power.common.util.CollectionUtil;
@@ -40,7 +48,17 @@
4048
import java.io.InputStream;
4149
import java.io.OutputStream;
4250
import java.nio.file.Files;
43-
import java.util.*;
51+
import java.util.ArrayList;
52+
import java.util.Collection;
53+
import java.util.Collections;
54+
import java.util.Enumeration;
55+
import java.util.HashSet;
56+
import java.util.LinkedHashMap;
57+
import java.util.List;
58+
import java.util.Map;
59+
import java.util.Objects;
60+
import java.util.Random;
61+
import java.util.Set;
4462
import java.util.concurrent.ConcurrentHashMap;
4563
import java.util.jar.JarEntry;
4664
import java.util.jar.JarFile;
@@ -231,7 +249,7 @@ private void loadJavaSource(ApiConfig config, JavaProjectBuilder builder) {
231249
}
232250
String strPath = path.getPath();
233251
if (StringUtil.isNotEmpty(strPath)) {
234-
strPath = strPath.replace("\\", "/");
252+
strPath = strPath.replace("\\", DocGlobalConstants.PATH_DELIMITER);
235253
loadJavaSource(strPath, builder);
236254
}
237255
}

src/main/java/com/ly/doc/builder/openapi/SwaggerBuilder.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,14 @@
2525
import com.ly.doc.constants.MediaType;
2626
import com.ly.doc.constants.ParamTypeConstants;
2727
import com.ly.doc.helper.JavaProjectBuilderHelper;
28-
import com.ly.doc.model.*;
28+
import com.ly.doc.model.ApiConfig;
29+
import com.ly.doc.model.ApiDoc;
30+
import com.ly.doc.model.ApiExceptionStatus;
31+
import com.ly.doc.model.ApiGroup;
32+
import com.ly.doc.model.ApiMethodDoc;
33+
import com.ly.doc.model.ApiParam;
34+
import com.ly.doc.model.ApiReqParam;
35+
import com.ly.doc.model.ApiSchema;
2936
import com.ly.doc.model.openapi.OpenApiTag;
3037
import com.ly.doc.utils.DocUtil;
3138
import com.ly.doc.utils.JsonUtil;
@@ -35,7 +42,13 @@
3542
import com.thoughtworks.qdox.JavaProjectBuilder;
3643
import org.apache.commons.lang3.StringUtils;
3744

38-
import java.util.*;
45+
import java.util.ArrayList;
46+
import java.util.HashMap;
47+
import java.util.HashSet;
48+
import java.util.List;
49+
import java.util.Map;
50+
import java.util.Objects;
51+
import java.util.Set;
3952
import java.util.stream.Stream;
4053

4154
/**
@@ -92,7 +105,8 @@ public void openApiCreate(ApiConfig config, ApiSchema<ApiDoc> apiSchema) {
92105
json.put("swagger", "2.0");
93106
json.put("info", buildInfo(config));
94107
json.put("host", config.getServerUrl() == null ? "127.0.0.1" : config.getServerUrl());
95-
json.put("basePath", StringUtils.isNotBlank(config.getPathPrefix()) ? config.getPathPrefix() : "/");
108+
json.put("basePath", StringUtils.isNotBlank(config.getPathPrefix()) ? config.getPathPrefix()
109+
: DocGlobalConstants.PATH_DELIMITER);
96110
Set<OpenApiTag> tags = new HashSet<>();
97111
json.put("tags", tags);
98112
json.put("paths", buildPaths(config, apiSchema, tags));

src/main/java/com/ly/doc/handler/IRequestMappingHandler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ default RequestMapping formatMappingData(ProjectDocConfigBuilder projectBuilder,
6262
String serverUrl = projectBuilder.getServerUrl();
6363
String contextPath = projectBuilder.getApiConfig().getPathPrefix();
6464
shortUrl = StringUtil.removeQuotes(shortUrl);
65-
String url = DocUrlUtil.getMvcUrls(serverUrl, contextPath + "/" + controllerBaseUrl, shortUrl);
66-
shortUrl = DocUrlUtil.getMvcUrls(DocGlobalConstants.EMPTY, contextPath + "/" + controllerBaseUrl, shortUrl);
65+
String url = DocUrlUtil.getMvcUrls(serverUrl,
66+
contextPath + DocGlobalConstants.PATH_DELIMITER + controllerBaseUrl, shortUrl);
67+
shortUrl = DocUrlUtil.getMvcUrls(DocGlobalConstants.EMPTY,
68+
contextPath + DocGlobalConstants.PATH_DELIMITER + controllerBaseUrl, shortUrl);
6769
String urlSuffix = projectBuilder.getApiConfig().getUrlSuffix();
6870
if (StringUtil.isEmpty(urlSuffix)) {
6971
urlSuffix = StringUtil.EMPTY;

src/main/java/com/ly/doc/handler/JaxrsPathHandler.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
package com.ly.doc.handler;
2222

2323
import com.ly.doc.builder.ProjectDocConfigBuilder;
24-
import com.ly.doc.constants.*;
24+
import com.ly.doc.constants.DocGlobalConstants;
25+
import com.ly.doc.constants.JAXRSAnnotations;
26+
import com.ly.doc.constants.JakartaJaxrsAnnotations;
27+
import com.ly.doc.constants.JavaTypeConstants;
28+
import com.ly.doc.constants.MediaType;
2529
import com.ly.doc.model.request.JaxrsPathMapping;
2630
import com.ly.doc.utils.DocUrlUtil;
2731
import com.ly.doc.utils.DocUtil;
@@ -30,7 +34,11 @@
3034
import com.thoughtworks.qdox.model.JavaAnnotation;
3135
import com.thoughtworks.qdox.model.JavaMethod;
3236

33-
import java.util.*;
37+
import java.util.Collections;
38+
import java.util.List;
39+
import java.util.Map;
40+
import java.util.Objects;
41+
import java.util.Set;
3442
import java.util.stream.Collectors;
3543
import java.util.stream.Stream;
3644

@@ -143,8 +151,9 @@ private JaxrsPathMapping getJaxbPathMapping(ProjectDocConfigBuilder projectBuild
143151
shortUrl = String.join(DocGlobalConstants.PATH_DELIMITER, DocGlobalConstants.PATH_DELIMITER, contextPath,
144152
baseUrl, shortUrl);
145153
if (urls.size() > 1) {
146-
url = DocUrlUtil.getMvcUrls(serverUrl, contextPath + "/" + baseUrl, urls);
147-
shortUrl = DocUrlUtil.getMvcUrls(DocGlobalConstants.EMPTY, contextPath + "/" + baseUrl, urls);
154+
url = DocUrlUtil.getMvcUrls(serverUrl, contextPath + DocGlobalConstants.PATH_DELIMITER + baseUrl, urls);
155+
shortUrl = DocUrlUtil.getMvcUrls(DocGlobalConstants.EMPTY,
156+
contextPath + DocGlobalConstants.PATH_DELIMITER + baseUrl, urls);
148157
}
149158
for (Map.Entry<String, String> entry : constantsMap.entrySet()) {
150159
String key = entry.getKey();

src/main/java/com/ly/doc/handler/SolonRequestMappingHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.ly.doc.builder.ProjectDocConfigBuilder;
2424
import com.ly.doc.constants.DocAnnotationConstants;
25+
import com.ly.doc.constants.DocGlobalConstants;
2526
import com.ly.doc.constants.Methods;
2627
import com.ly.doc.constants.SolonAnnotations;
2728
import com.ly.doc.function.RequestMappingFunc;
@@ -71,8 +72,8 @@ public RequestMapping handle(ProjectDocConfigBuilder projectBuilder, String cont
7172
|| SolonAnnotations.REQUEST_MAPPING_FULLY.equals(annotationName)) {
7273
ClassLoader classLoader = projectBuilder.getApiConfig().getClassLoader();
7374
shortUrl = DocUtil.handleMappingValue(classLoader, annotation);
74-
shortUrl = shortUrl.equals("/") ? "" : shortUrl; // There is no need to
75-
// add '/' to the end
75+
// There is no need to add '/' to the end
76+
shortUrl = shortUrl.equals(DocGlobalConstants.PATH_DELIMITER) ? "" : shortUrl;
7677
Object produces = annotation.getNamedParameter("produces");
7778
if (Objects.nonNull(produces)) {
7879
mediaType = produces.toString();

src/main/java/com/ly/doc/template/IRestDocTemplate.java

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,81 @@
2121
package com.ly.doc.template;
2222

2323
import com.ly.doc.builder.ProjectDocConfigBuilder;
24-
import com.ly.doc.constants.*;
24+
import com.ly.doc.constants.ApiReqParamInTypeEnum;
25+
import com.ly.doc.constants.DocAnnotationConstants;
26+
import com.ly.doc.constants.DocGlobalConstants;
27+
import com.ly.doc.constants.DocTags;
28+
import com.ly.doc.constants.FormDataContentTypeEnum;
29+
import com.ly.doc.constants.JavaTypeConstants;
30+
import com.ly.doc.constants.MediaType;
31+
import com.ly.doc.constants.Methods;
32+
import com.ly.doc.constants.ParamTypeConstants;
2533
import com.ly.doc.handler.IHeaderHandler;
2634
import com.ly.doc.handler.IRequestMappingHandler;
2735
import com.ly.doc.helper.FormDataBuildHelper;
2836
import com.ly.doc.helper.JsonBuildHelper;
2937
import com.ly.doc.helper.ParamsBuildHelper;
30-
import com.ly.doc.model.*;
38+
import com.ly.doc.model.ApiConfig;
39+
import com.ly.doc.model.ApiDoc;
40+
import com.ly.doc.model.ApiExceptionStatus;
41+
import com.ly.doc.model.ApiMethodDoc;
42+
import com.ly.doc.model.ApiMethodReqParam;
43+
import com.ly.doc.model.ApiParam;
44+
import com.ly.doc.model.ApiReqParam;
45+
import com.ly.doc.model.ApiSchema;
46+
import com.ly.doc.model.DocJavaMethod;
47+
import com.ly.doc.model.DocJavaParameter;
48+
import com.ly.doc.model.DocMapping;
49+
import com.ly.doc.model.ExceptionAdviceMethod;
50+
import com.ly.doc.model.FormData;
3151
import com.ly.doc.model.annotation.EntryAnnotation;
3252
import com.ly.doc.model.annotation.ExceptionAdviceAnnotation;
3353
import com.ly.doc.model.annotation.FrameworkAnnotations;
3454
import com.ly.doc.model.annotation.MappingAnnotation;
3555
import com.ly.doc.model.request.ApiRequestExample;
3656
import com.ly.doc.model.request.CurlRequest;
3757
import com.ly.doc.model.request.RequestMapping;
38-
import com.ly.doc.utils.*;
39-
import com.power.common.util.*;
40-
import com.thoughtworks.qdox.model.*;
58+
import com.ly.doc.utils.ApiParamTreeUtil;
59+
import com.ly.doc.utils.CurlUtil;
60+
import com.ly.doc.utils.DocClassUtil;
61+
import com.ly.doc.utils.DocUtil;
62+
import com.ly.doc.utils.HttpStatusUtil;
63+
import com.ly.doc.utils.JavaClassUtil;
64+
import com.ly.doc.utils.JavaClassValidateUtil;
65+
import com.ly.doc.utils.JavaFieldUtil;
66+
import com.ly.doc.utils.JsonUtil;
67+
import com.ly.doc.utils.OpenApiSchemaUtil;
68+
import com.ly.doc.utils.RequestExampleUtil;
69+
import com.ly.doc.utils.TornaUtil;
70+
import com.power.common.util.CollectionUtil;
71+
import com.power.common.util.RandomUtil;
72+
import com.power.common.util.StringUtil;
73+
import com.power.common.util.UrlUtil;
74+
import com.power.common.util.ValidateUtil;
75+
import com.thoughtworks.qdox.model.DocletTag;
76+
import com.thoughtworks.qdox.model.JavaAnnotation;
77+
import com.thoughtworks.qdox.model.JavaClass;
78+
import com.thoughtworks.qdox.model.JavaMethod;
79+
import com.thoughtworks.qdox.model.JavaParameter;
80+
import com.thoughtworks.qdox.model.JavaType;
4181
import com.thoughtworks.qdox.model.expression.AnnotationValue;
4282
import org.apache.commons.lang3.ArrayUtils;
4383
import org.apache.commons.lang3.StringUtils;
4484

45-
import java.util.*;
85+
import java.util.ArrayList;
86+
import java.util.Collection;
87+
import java.util.Collections;
88+
import java.util.Comparator;
89+
import java.util.HashMap;
90+
import java.util.HashSet;
91+
import java.util.Iterator;
92+
import java.util.LinkedHashMap;
93+
import java.util.LinkedHashSet;
94+
import java.util.LinkedList;
95+
import java.util.List;
96+
import java.util.Map;
97+
import java.util.Objects;
98+
import java.util.Set;
4699
import java.util.concurrent.atomic.AtomicInteger;
47100
import java.util.logging.Logger;
48101
import java.util.stream.Collectors;
@@ -1271,7 +1324,7 @@ default ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap
12711324
path = DocUtil.formatAndRemove(path, pathParamsMap);
12721325
String url = UrlUtil.urlJoin(path, queryParamsMap);
12731326
url = StringUtil.removeQuotes(url);
1274-
url = apiMethodDoc.getServerUrl() + "/" + url;
1327+
url = apiMethodDoc.getServerUrl() + DocGlobalConstants.PATH_DELIMITER + url;
12751328
url = UrlUtil.simplifyUrl(url);
12761329
CurlRequest curlRequest = CurlRequest.builder()
12771330
.setContentType(apiMethodDoc.getContentType())
@@ -1606,7 +1659,7 @@ default DocJavaMethod convertToDocJavaMethod(ApiConfig apiConfig, ProjectDocConf
16061659
}
16071660
DocletTag pageTag = method.getTagByName(DocTags.PAGE);
16081661
if (Objects.nonNull(method.getTagByName(DocTags.PAGE))) {
1609-
String pageUrl = projectBuilder.getServerUrl() + "/" + pageTag.getValue();
1662+
String pageUrl = projectBuilder.getServerUrl() + DocGlobalConstants.PATH_DELIMITER + pageTag.getValue();
16101663
docJavaMethod.setPage(UrlUtil.simplifyUrl(pageUrl));
16111664
}
16121665

src/main/java/com/ly/doc/template/RpcDocBuildTemplate.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
package com.ly.doc.template;
2222

2323
import com.ly.doc.builder.ProjectDocConfigBuilder;
24+
import com.ly.doc.constants.DocGlobalConstants;
2425
import com.ly.doc.constants.DocTags;
2526
import com.ly.doc.constants.DubboAnnotationConstants;
2627
import com.ly.doc.constants.FrameworkEnum;
@@ -40,7 +41,12 @@
4041
import com.thoughtworks.qdox.model.JavaType;
4142
import com.thoughtworks.qdox.model.expression.AnnotationValue;
4243

43-
import java.util.*;
44+
import java.util.ArrayList;
45+
import java.util.Collection;
46+
import java.util.Collections;
47+
import java.util.Comparator;
48+
import java.util.List;
49+
import java.util.Objects;
4450
import java.util.concurrent.atomic.AtomicInteger;
4551
import java.util.stream.Collectors;
4652

@@ -192,7 +198,7 @@ private void handleJavaApiDoc(JavaClass cls, List<RpcApiDoc> apiDocList, List<Rp
192198
apiDoc.setName(className);
193199
apiDoc.setShortName(shortName);
194200
apiDoc.setAlias(className);
195-
apiDoc.setUri(builder.getServerUrl() + "/" + className);
201+
apiDoc.setUri(builder.getServerUrl() + DocGlobalConstants.PATH_DELIMITER + className);
196202
apiDoc.setProtocol(FrameworkEnum.DUBBO.getFramework());
197203
if (builder.getApiConfig().isMd5EncryptedHtmlName()) {
198204
String name = DocUtil.generateId(apiDoc.getName());

src/main/java/com/ly/doc/utils/BeetlTemplateUtil.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
*/
2121
package com.ly.doc.utils;
2222

23+
import com.ly.doc.constants.DocGlobalConstants;
2324
import com.power.common.util.FileUtil;
2425
import org.beetl.core.Configuration;
2526
import org.beetl.core.GroupTemplate;
@@ -94,7 +95,8 @@ public static Map<String, String> getTemplatesRendered(String path, Map<String,
9495
*/
9596
private static GroupTemplate getGroupTemplate(String path) {
9697
try {
97-
ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader("/" + path + "/");
98+
ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader(
99+
DocGlobalConstants.PATH_DELIMITER + path + DocGlobalConstants.PATH_DELIMITER);
98100
Configuration cfg = Configuration.defaultConfiguration();
99101
return new GroupTemplate(resourceLoader, cfg);
100102
}

src/main/java/com/ly/doc/utils/DocUrlUtil.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ public static String getMvcUrls(String baseServer, String baseUrl, List<String>
6767
String trimUrl = Optional.ofNullable(StringUtil.trimBlank(urls.get(i))).orElse(StringUtil.EMPTY);
6868
String url = baseServer;
6969
if (StringUtil.isNotEmpty(trimBase)) {
70-
url = url + "/" + trimBase;
70+
url = url + DocGlobalConstants.PATH_DELIMITER + trimBase;
7171
}
7272
if (StringUtil.isNotEmpty(trimUrl)) {
73-
url = url + "/" + trimUrl;
73+
url = url + DocGlobalConstants.PATH_DELIMITER + trimUrl;
7474
}
7575
sb.append(UrlUtil.simplifyUrl(url));
7676
if (i < size - 1) {
@@ -111,7 +111,7 @@ public static String formatRequestUrl(Map<String, String> pathParamsMap, Map<Str
111111
path = DocUtil.formatAndRemove(path, pathParamsMap);
112112
String url = UrlUtil.urlJoin(path, queryParamsMap);
113113
url = StringUtil.removeQuotes(url);
114-
url = serverUrl + "/" + url;
114+
url = serverUrl + DocGlobalConstants.PATH_DELIMITER + url;
115115
url = UrlUtil.simplifyUrl(url);
116116
return url;
117117
}

0 commit comments

Comments
 (0)