Skip to content

Commit 78d5221

Browse files
author
bnasslahsen
committed
Merge branch 'master' of https://github.com/m-kay/springdoc-openapi into m-kay-master
2 parents 118eaf4 + e7c10c4 commit 78d5221

File tree

6 files changed

+52
-11
lines changed

6 files changed

+52
-11
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.swagger.v3.oas.models.*;
77
import io.swagger.v3.oas.models.PathItem.HttpMethod;
88
import io.swagger.v3.oas.models.responses.ApiResponses;
9+
import org.apache.commons.lang3.StringUtils;
910
import org.slf4j.Logger;
1011
import org.slf4j.LoggerFactory;
1112
import org.springdoc.core.*;
@@ -19,7 +20,12 @@
1920
import org.springframework.web.bind.annotation.RequestMethod;
2021
import org.springframework.web.method.HandlerMethod;
2122

23+
import java.io.UnsupportedEncodingException;
2224
import java.lang.reflect.Method;
25+
import java.net.URI;
26+
import java.net.URISyntaxException;
27+
import java.net.URLDecoder;
28+
import java.nio.charset.StandardCharsets;
2329
import java.time.Duration;
2430
import java.time.Instant;
2531
import java.util.*;
@@ -291,4 +297,12 @@ protected boolean isPackageToScan(String aPackage) {
291297
protected boolean isPathToMatch(String operationPath) {
292298
return CollectionUtils.isEmpty(pathsToMatch) || pathsToMatch.stream().anyMatch(pattern -> antPathMatcher.match(pattern, operationPath));
293299
}
300+
301+
protected static String decode(String requestURI) {
302+
try {
303+
return URLDecoder.decode(requestURI, StandardCharsets.UTF_8.toString());
304+
} catch (UnsupportedEncodingException e) {
305+
return requestURI;
306+
}
307+
}
294308
}

springdoc-openapi-webflux-core/src/main/java/org/springdoc/api/OpenApiResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ protected void getPaths(Map<String, Object> restControllers) {
8282
}
8383

8484
private void calculateServerUrl(ServerHttpRequest serverHttpRequest, String apiDocsUrl) {
85-
String requestUrl = serverHttpRequest.getURI().toString();
85+
String requestUrl = decode(serverHttpRequest.getURI().toString());
8686
String serverBaseUrl = requestUrl.substring(0, requestUrl.length() - apiDocsUrl.length());
8787
openAPIBuilder.setServerBaseUrl(serverBaseUrl);
8888
}

springdoc-openapi-webmvc-core/src/main/java/org/springdoc/api/MultipleOpenApiResource.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import io.swagger.v3.oas.annotations.Operation;
55
import org.springdoc.core.*;
6+
import org.springframework.beans.factory.InitializingBean;
67
import org.springframework.beans.factory.ObjectFactory;
78
import org.springframework.beans.factory.annotation.Value;
89
import org.springframework.http.MediaType;
@@ -21,14 +22,36 @@
2122
import static org.springframework.util.AntPathMatcher.DEFAULT_PATH_SEPARATOR;
2223

2324
@RestController
24-
public class MultipleOpenApiResource {
25+
public class MultipleOpenApiResource implements InitializingBean {
2526

26-
private final Map<String, OpenApiResource> groupedOpenApiResources;
27+
private Map<String, OpenApiResource> groupedOpenApiResources;
28+
private final List<GroupedOpenApi> groupedOpenApis;
29+
private final ObjectFactory<OpenAPIBuilder> defaultOpenAPIBuilder;
30+
private final AbstractRequestBuilder requestBuilder;
31+
private final AbstractResponseBuilder responseBuilder;
32+
private final OperationBuilder operationParser;
33+
private final RequestMappingInfoHandlerMapping requestMappingHandlerMapping;
34+
private final Optional<ActuatorProvider> servletContextProvider;
35+
36+
@Value(SPRINGDOC_SHOW_ACTUATOR_VALUE)
37+
private boolean showActuator;
2738

2839
public MultipleOpenApiResource(List<GroupedOpenApi> groupedOpenApis,
2940
ObjectFactory<OpenAPIBuilder> defaultOpenAPIBuilder, AbstractRequestBuilder requestBuilder,
3041
AbstractResponseBuilder responseBuilder, OperationBuilder operationParser,
3142
RequestMappingInfoHandlerMapping requestMappingHandlerMapping, Optional<ActuatorProvider> servletContextProvider) {
43+
44+
this.groupedOpenApis = groupedOpenApis;
45+
this.defaultOpenAPIBuilder = defaultOpenAPIBuilder;
46+
this.requestBuilder = requestBuilder;
47+
this.responseBuilder = responseBuilder;
48+
this.operationParser = operationParser;
49+
this.requestMappingHandlerMapping = requestMappingHandlerMapping;
50+
this.servletContextProvider = servletContextProvider;
51+
}
52+
53+
@Override
54+
public void afterPropertiesSet() throws Exception {
3255
this.groupedOpenApiResources = groupedOpenApis.stream()
3356
.collect(Collectors.toMap(GroupedOpenApi::getGroup, item ->
3457
new OpenApiResource(
@@ -38,7 +61,8 @@ public MultipleOpenApiResource(List<GroupedOpenApi> groupedOpenApis,
3861
operationParser,
3962
requestMappingHandlerMapping,
4063
servletContextProvider,
41-
Optional.of(item.getOpenApiCustomisers()), item.getPathsToMatch(), item.getPackagesToScan()
64+
Optional.of(item.getOpenApiCustomisers()), item.getPathsToMatch(), item.getPackagesToScan(),
65+
showActuator
4266
)
4367
));
4468
}
@@ -67,4 +91,4 @@ private OpenApiResource getOpenApiResourceOrThrow(String group) {
6791
}
6892
return openApiResource;
6993
}
70-
}
94+
}

springdoc-openapi-webmvc-core/src/main/java/org/springdoc/api/OpenApiResource.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,15 @@ public OpenApiResource(OpenAPIBuilder openAPIBuilder, AbstractRequestBuilder req
5353
public OpenApiResource(OpenAPIBuilder openAPIBuilder, AbstractRequestBuilder requestBuilder,
5454
AbstractResponseBuilder responseBuilder, OperationBuilder operationParser,
5555
RequestMappingInfoHandlerMapping requestMappingHandlerMapping, Optional<ActuatorProvider> servletContextProvider,
56-
Optional<List<OpenApiCustomiser>> openApiCustomisers, List<String> pathsToMatch, List<String> packagesToScan) {
56+
Optional<List<OpenApiCustomiser>> openApiCustomisers, List<String> pathsToMatch, List<String> packagesToScan,
57+
boolean showActuator) {
5758
super(openAPIBuilder, requestBuilder, responseBuilder, operationParser, openApiCustomisers, pathsToMatch, packagesToScan);
5859
this.requestMappingHandlerMapping = requestMappingHandlerMapping;
5960
this.servletContextProvider = servletContextProvider;
61+
this.showActuator = showActuator;
6062
}
6163

64+
6265
@Operation(hidden = true)
6366
@GetMapping(value = API_DOCS_URL, produces = MediaType.APPLICATION_JSON_VALUE)
6467
public String openapiJson(HttpServletRequest request, @Value(API_DOCS_URL) String apiDocsUrl)
@@ -126,8 +129,8 @@ private boolean isRestController(Map<String, Object> restControllers, HandlerMet
126129
}
127130

128131
private void calculateServerUrl(HttpServletRequest request, String apiDocsUrl) {
129-
StringBuffer requestUrl = request.getRequestURL();
130-
String serverBaseUrl = requestUrl.substring(0, requestUrl.length() - apiDocsUrl.length());
131-
openAPIBuilder.setServerBaseUrl(serverBaseUrl);
132+
String requestUrl = decode(request.getRequestURL().toString());
133+
String calculatedUrl = requestUrl.substring(0, requestUrl.length() - apiDocsUrl.length());
134+
openAPIBuilder.setServerBaseUrl(calculatedUrl);
132135
}
133136
}

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app68/SpringDocApp68Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void testApp3() throws Exception {
5757

5858
@Test
5959
public void testApp4() throws Exception {
60-
mockMvc.perform(get(Constants.DEFAULT_API_DOCS_URL + "/groups"))
60+
mockMvc.perform(get(Constants.DEFAULT_API_DOCS_URL + "/groups test"))
6161
.andExpect(status().isOk())
6262
.andExpect(jsonPath("$.openapi", is("3.0.1")))
6363
.andExpect(content().json(getContent("results/app684.json"), true));

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app68/SpringDocTestApp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public GroupedOpenApi petOpenApi() {
4343
@Bean
4444
public GroupedOpenApi groupOpenApi() {
4545
return GroupedOpenApi.builder()
46-
.setGroup("groups")
46+
.setGroup("groups test")
4747
.pathsToMatch("/v1/**")
4848
.packagesToScan("test.org.springdoc.api.app68.api.user", "test.org.springdoc.api.app68.api.store")
4949
.build();

0 commit comments

Comments
 (0)