Skip to content

Commit 0a2862c

Browse files
author
bnasslahsen
committed
Merge branch 'm-kay-master'
2 parents 118eaf4 + a5290d4 commit 0a2862c

File tree

6 files changed

+55
-11
lines changed

6 files changed

+55
-11
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
import org.springframework.web.bind.annotation.RequestMethod;
2020
import org.springframework.web.method.HandlerMethod;
2121

22+
import java.io.UnsupportedEncodingException;
2223
import java.lang.reflect.Method;
24+
import java.net.URLDecoder;
25+
import java.nio.charset.StandardCharsets;
2326
import java.time.Duration;
2427
import java.time.Instant;
2528
import java.util.*;
@@ -291,4 +294,12 @@ protected boolean isPackageToScan(String aPackage) {
291294
protected boolean isPathToMatch(String operationPath) {
292295
return CollectionUtils.isEmpty(pathsToMatch) || pathsToMatch.stream().anyMatch(pattern -> antPathMatcher.match(pattern, operationPath));
293296
}
297+
298+
protected String decode(String requestURI) {
299+
try {
300+
return URLDecoder.decode(requestURI, StandardCharsets.UTF_8.toString());
301+
} catch (UnsupportedEncodingException e) {
302+
return requestURI;
303+
}
304+
}
294305
}

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: 27 additions & 3 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
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,12 @@ 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

6264
@Operation(hidden = true)
@@ -126,8 +128,8 @@ private boolean isRestController(Map<String, Object> restControllers, HandlerMet
126128
}
127129

128130
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);
131+
String requestUrl = decode(request.getRequestURL().toString());
132+
String calculatedUrl = requestUrl.substring(0, requestUrl.length() - apiDocsUrl.length());
133+
openAPIBuilder.setServerBaseUrl(calculatedUrl);
132134
}
133135
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
import org.springframework.test.web.servlet.MockMvc;
1414
import test.org.springdoc.api.AbstractSpringDocTest;
1515

16+
import static org.hamcrest.Matchers.containsString;
1617
import static org.hamcrest.Matchers.is;
1718
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
1819
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
1920
import static test.org.springdoc.utils.FileUtils.getContent;
2021

2122
@RunWith(SpringRunner.class)
2223
@ActiveProfiles("test")
23-
@SpringBootTest
24+
@SpringBootTest(properties = "springdoc.show-actuator=true")
2425
@AutoConfigureMockMvc
2526
public class SpringDocApp68Test {
2627

@@ -57,9 +58,15 @@ public void testApp3() throws Exception {
5758

5859
@Test
5960
public void testApp4() throws Exception {
60-
mockMvc.perform(get(Constants.DEFAULT_API_DOCS_URL + "/groups"))
61+
mockMvc.perform(get(Constants.DEFAULT_API_DOCS_URL + "/groups test"))
6162
.andExpect(status().isOk())
6263
.andExpect(jsonPath("$.openapi", is("3.0.1")))
6364
.andExpect(content().json(getContent("results/app684.json"), true));
6465
}
66+
67+
@Test
68+
public void testActuator() throws Exception {
69+
mockMvc.perform(get(Constants.DEFAULT_API_DOCS_URL)).andExpect(status().isOk())
70+
.andExpect(jsonPath("$.openapi", is("3.0.1"))).andExpect(jsonPath("$.paths./actuator/info.get.operationId", containsString("handle"))).andExpect(jsonPath("$.paths./actuator/health.get.operationId", containsString("handle")));
71+
}
6572
}

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)