Skip to content

Commit 9d0a511

Browse files
author
springdoc
committed
fixes #210 #214 #209
1 parent d858ba3 commit 9d0a511

File tree

17 files changed

+178
-6
lines changed

17 files changed

+178
-6
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;
1111
import org.springdoc.core.*;
12+
import org.springframework.beans.factory.annotation.Value;
1213
import org.springframework.core.annotation.AnnotationUtils;
1314
import org.springframework.util.CollectionUtils;
1415
import org.springframework.web.bind.annotation.RequestMapping;
@@ -22,6 +23,8 @@
2223
import java.util.stream.Collectors;
2324
import java.util.stream.Stream;
2425

26+
import static org.springdoc.core.Constants.SPRINGDOC_PACKAGES_TO_SCAN;
27+
2528
public abstract class AbstractOpenApiResource {
2629

2730
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractOpenApiResource.class);
@@ -31,6 +34,8 @@ public abstract class AbstractOpenApiResource {
3134
private final OperationBuilder operationParser;
3235
private final Optional<List<OpenApiCustomiser>> openApiCustomisers;
3336
private boolean computeDone;
37+
@Value(SPRINGDOC_PACKAGES_TO_SCAN)
38+
private List<String> packagesToScan;
3439

3540
protected AbstractOpenApiResource(OpenAPIBuilder openAPIBuilder, AbstractRequestBuilder requestBuilder,
3641
AbstractResponseBuilder responseBuilder, OperationBuilder operationParser,
@@ -43,7 +48,7 @@ protected AbstractOpenApiResource(OpenAPIBuilder openAPIBuilder, AbstractRequest
4348
this.openApiCustomisers = openApiCustomisers;
4449
}
4550

46-
protected OpenAPI getOpenApi() {
51+
protected synchronized OpenAPI getOpenApi() {
4752
OpenAPI openApi;
4853
if (!computeDone) {
4954
Instant start = Instant.now();
@@ -258,4 +263,8 @@ private PathItem buildPathItem(RequestMethod requestMethod, Operation operation,
258263
}
259264
return pathItemObject;
260265
}
266+
267+
protected boolean isPackageToScan(String aPackage) {
268+
return CollectionUtils.isEmpty(packagesToScan) || packagesToScan.stream().filter(pack -> aPackage.equals(pack) || aPackage.startsWith(pack + ".")).findAny().isPresent();
269+
}
261270
}

springdoc-openapi-common/src/main/java/org/springdoc/core/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public final class Constants {
1212
public static final String SPRINGDOC_SWAGGER_UI_ENABLED = "springdoc.swagger-ui.enabled";
1313
public static final String SPRINGDOC_SHOW_ACTUATOR = "springdoc.show.actuator";
1414
public static final String SPRINGDOC_SHOW_ACTUATOR_VALUE = "${" + SPRINGDOC_SHOW_ACTUATOR + ":false}";
15+
public static final String SPRINGDOC_PACKAGES_TO_SCAN ="${springdoc.packagesToScan:#{null}}";
1516
public static final String SPRINGDOC_ACTUATOR_TAG = "Actuator";
1617
public static final String DEFAULT_WEB_JARS_PREFIX_URL = "/webjars";
1718
public static final String WEB_JARS_PREFIX_URL = "${springdoc.webjars.prefix:#{T(org.springdoc.core.Constants).DEFAULT_WEB_JARS_PREFIX_URL}}";

springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfigProperties.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
import org.springframework.boot.context.properties.ConfigurationProperties;
44
import org.springframework.context.annotation.Configuration;
55

6+
import java.util.ArrayList;
7+
import java.util.List;
8+
69
@Configuration
710
@ConfigurationProperties(prefix = "springdoc")
811
public class SpringDocConfigProperties {
912

1013
private Boolean showActuator = false;
1114
private Webjars webjars = new Webjars();
1215
private ApiDocs apiDocs = new ApiDocs();
16+
private List<String> packagesToScan;
1317

1418
public static class Webjars {
1519
private String prefix = "/webjars";
@@ -50,6 +54,14 @@ public void setEnabled(Boolean enabled) {
5054
}
5155
}
5256

57+
public List<String> getPackagesToScan() {
58+
return packagesToScan;
59+
}
60+
61+
public void setPackagesToScan(List<String> packagesToScan) {
62+
this.packagesToScan = packagesToScan;
63+
}
64+
5365
public Boolean getShowActuator() {
5466
return showActuator;
5567
}

springdoc-openapi-common/src/main/java/org/springdoc/core/SwaggerUiConfigProperties.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import org.apache.commons.lang3.StringUtils;
55
import org.springframework.boot.context.properties.ConfigurationProperties;
66
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.util.CollectionUtils;
78

9+
import java.util.List;
810
import java.util.Map;
911
import java.util.TreeMap;
1012

@@ -88,6 +90,12 @@ public class SwaggerUiConfigProperties {
8890
*/
8991
private Boolean showCommonExtensions;
9092

93+
/**
94+
* The supported try it out methods
95+
*/
96+
private List<String> supportedSubmitMethods;
97+
98+
9199
public Map<String, String> getConfigParameters() {
92100
final Map<String, String> params = new TreeMap<>();
93101
put("layout", layout, params);
@@ -105,6 +113,8 @@ public Map<String, String> getConfigParameters() {
105113
put("showCommonExtensions", showCommonExtensions, params);
106114
put("operationsSorter", operationsSorter, params);
107115
put("tagsSorter", tagsSorter, params);
116+
if (!CollectionUtils.isEmpty(supportedSubmitMethods))
117+
put("supportedSubmitMethods", supportedSubmitMethods.toString(), params);
108118
return params;
109119
}
110120

@@ -253,4 +263,12 @@ public Boolean getShowCommonExtensions() {
253263
public void setShowCommonExtensions(Boolean showCommonExtensions) {
254264
this.showCommonExtensions = showCommonExtensions;
255265
}
266+
267+
public List<String> getSupportedSubmitMethods() {
268+
return supportedSubmitMethods;
269+
}
270+
271+
public void setSupportedSubmitMethods(List<String> supportedSubmitMethods) {
272+
this.supportedSubmitMethods = supportedSubmitMethods;
273+
}
256274
}

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
@@ -74,7 +74,7 @@ protected void getPaths(Map<String, Object> restControllers) {
7474
Map<String, String> regexMap = new LinkedHashMap<>();
7575
operationPath = PathUtils.parsePath(operationPath, regexMap);
7676
if (operationPath.startsWith(DEFAULT_PATH_SEPARATOR)
77-
&& restControllers.containsKey(handlerMethod.getBean().toString())) {
77+
&& restControllers.containsKey(handlerMethod.getBean().toString()) && isPackageToScan(handlerMethod.getBeanType().getPackage().getName())) {
7878
Set<RequestMethod> requestMethods = requestMappingInfo.getMethodsCondition().getMethods();
7979
calculatePath(openAPIBuilder, handlerMethod, operationPath, requestMethods);
8080
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package test.org.springdoc.api.app63;
2+
3+
import org.springframework.web.bind.annotation.GetMapping;
4+
import org.springframework.web.bind.annotation.RestController;
5+
6+
@RestController
7+
public class HelloController {
8+
9+
@GetMapping("/test")
10+
public void test(String hello) {
11+
}
12+
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package test.org.springdoc.api.app63;
2+
3+
import org.junit.AfterClass;
4+
import org.junit.BeforeClass;
5+
import org.springframework.context.annotation.ComponentScan;
6+
import test.org.springdoc.api.AbstractSpringDocTest;
7+
8+
public class SpringDocApp63Test extends AbstractSpringDocTest {
9+
10+
@BeforeClass
11+
public static void beforeClass() {
12+
System.setProperty("springdoc.packagesToScan", "hell,hello1, hello.me");
13+
}
14+
15+
@AfterClass
16+
public static void afterClass() {
17+
System.clearProperty("springdoc.packagesToScan");
18+
}
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package test.org.springdoc.api.app63;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.context.annotation.ComponentScan;
6+
7+
@SpringBootApplication
8+
@ComponentScan(basePackages = {"org.springdoc", "test.org.springdoc.api.app63"})
9+
public class SpringDocTestApp {
10+
11+
public static void main(String[] args) {
12+
SpringApplication.run(SpringDocTestApp.class, args);
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"openapi": "3.0.1",
3+
"info": {
4+
"title": "OpenAPI definition",
5+
"version": "v0"
6+
},
7+
"servers": [
8+
{
9+
"url": "",
10+
"description": "Generated server url"
11+
}
12+
],
13+
"paths": {},
14+
"components": {}
15+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private void calculatePath(Map<String, Object> restControllers, Map<RequestMappi
8989
String operationPath = CollectionUtils.isEmpty(patterns) ? "/" : patterns.iterator().next();
9090
Map<String, String> regexMap = new LinkedHashMap<>();
9191
operationPath = PathUtils.parsePath(operationPath, regexMap);
92-
if (isRestController(restControllers, handlerMethod, operationPath)) {
92+
if (isRestController(restControllers, handlerMethod, operationPath) && isPackageToScan(handlerMethod.getBeanType().getPackage().getName())) {
9393
Set<RequestMethod> requestMethods = requestMappingInfo.getMethodsCondition().getMethods();
9494
calculatePath(openAPIBuilder, handlerMethod, operationPath, requestMethods);
9595
}

0 commit comments

Comments
 (0)