Skip to content

Commit 5057671

Browse files
committed
code review
1 parent f823b13 commit 5057671

File tree

20 files changed

+160
-149
lines changed

20 files changed

+160
-149
lines changed

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import org.springdoc.core.GenericParameterService;
8080
import org.springdoc.core.GenericResponseService;
8181
import org.springdoc.core.MethodAttributes;
82+
import org.springdoc.core.filters.OpenApiMethodFilter;
8283
import org.springdoc.core.OpenAPIService;
8384
import org.springdoc.core.OperationService;
8485
import org.springdoc.core.SpringDocConfigProperties;
@@ -179,6 +180,11 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
179180
*/
180181
private final Optional<List<OperationCustomizer>> operationCustomizers;
181182

183+
/**
184+
* The method filters to use.
185+
*/
186+
private final Optional<List<OpenApiMethodFilter>> methodFilters;
187+
182188
/**
183189
* The Ant path matcher.
184190
*/
@@ -222,6 +228,7 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
222228
* @param operationParser the operation parser
223229
* @param operationCustomizers the operation customizers
224230
* @param openApiCustomisers the open api customisers
231+
* @param methodFilters the method filters
225232
* @param springDocConfigProperties the spring doc config properties
226233
* @param springDocProviders the spring doc providers
227234
*/
@@ -230,6 +237,7 @@ protected AbstractOpenApiResource(String groupName, ObjectFactory<OpenAPIService
230237
GenericResponseService responseBuilder, OperationService operationParser,
231238
Optional<List<OperationCustomizer>> operationCustomizers,
232239
Optional<List<OpenApiCustomiser>> openApiCustomisers,
240+
Optional<List<OpenApiMethodFilter>> methodFilters,
233241
SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
234242
super();
235243
this.groupName = Objects.requireNonNull(groupName, "groupName");
@@ -239,6 +247,7 @@ protected AbstractOpenApiResource(String groupName, ObjectFactory<OpenAPIService
239247
this.responseBuilder = responseBuilder;
240248
this.operationParser = operationParser;
241249
this.openApiCustomisers = openApiCustomisers;
250+
this.methodFilters = methodFilters;
242251
this.springDocProviders = springDocProviders;
243252
//add the default customizers
244253
Map<String, OpenApiCustomiser> existingOpenApiCustomisers = openAPIService.getContext().getBeansOfType(OpenApiCustomiser.class);
@@ -650,7 +659,7 @@ protected void getRouterFunctionPaths(String beanName, AbstractRouterFunctionVis
650659
* @return the boolean
651660
*/
652661
protected boolean isFilterCondition(HandlerMethod handlerMethod, String operationPath, String[] produces, String[] consumes, String[] headers) {
653-
return isSuitableTargetMethod(handlerMethod)
662+
return isMethodToFilter(handlerMethod)
654663
&& isPackageToScan(handlerMethod.getBeanType().getPackage())
655664
&& isFilterCondition(operationPath, produces, consumes, headers);
656665
}
@@ -661,15 +670,12 @@ && isPackageToScan(handlerMethod.getBeanType().getPackage())
661670
* @param handlerMethod the method to check
662671
* @return whether the method should be included in the current OpenAPI definition
663672
*/
664-
protected boolean isSuitableTargetMethod(HandlerMethod handlerMethod) {
665-
return springDocConfigProperties.getGroupConfigs().stream()
666-
.filter(groupConfig -> this.groupName.equals(groupConfig.getGroup()))
667-
.findAny()
668-
.map(GroupConfig::getMethodFilters)
669-
.map(Collection::stream)
670-
.map(stream -> stream.allMatch(m -> m.includeMethodInOpenApi(handlerMethod.getMethod())))
671-
.orElse(true);
672-
}
673+
protected boolean isMethodToFilter(HandlerMethod handlerMethod) {
674+
return this.methodFilters
675+
.map(Collection::stream)
676+
.map(stream -> stream.allMatch(m -> m.isMethodToInclude(handlerMethod.getMethod())))
677+
.orElse(true);
678+
}
673679

674680
/**
675681
* Is condition to match boolean.

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import org.springdoc.core.customizers.OpenApiCustomiser;
2929
import org.springdoc.core.customizers.OperationCustomizer;
30+
import org.springdoc.core.filters.OpenApiMethodFilter;
3031

3132
import org.springframework.util.CollectionUtils;
3233

@@ -91,7 +92,7 @@ public class GroupedOpenApi {
9192
/**
9293
* The method filters to use.
9394
*/
94-
private final List<MethodFilter> methodFilters;
95+
private final List<OpenApiMethodFilter> openApiMethodFilters;
9596

9697
/**
9798
* Instantiates a new Grouped open api.
@@ -109,7 +110,7 @@ private GroupedOpenApi(Builder builder) {
109110
this.pathsToExclude = builder.pathsToExclude;
110111
this.openApiCustomisers = Objects.requireNonNull(builder.openApiCustomisers);
111112
this.operationCustomizers = Objects.requireNonNull(builder.operationCustomizers);
112-
this.methodFilters = Objects.requireNonNull(builder.methodFilters);
113+
this.openApiMethodFilters = Objects.requireNonNull(builder.methodFilters);
113114
if (CollectionUtils.isEmpty(this.pathsToMatch)
114115
&& CollectionUtils.isEmpty(this.packagesToScan)
115116
&& CollectionUtils.isEmpty(this.producesToMatch)
@@ -119,7 +120,7 @@ private GroupedOpenApi(Builder builder) {
119120
&& CollectionUtils.isEmpty(this.packagesToExclude)
120121
&& CollectionUtils.isEmpty(openApiCustomisers)
121122
&& CollectionUtils.isEmpty(operationCustomizers)
122-
&& CollectionUtils.isEmpty(methodFilters))
123+
&& CollectionUtils.isEmpty(openApiMethodFilters))
123124
throw new IllegalStateException("Packages to scan or paths to filter or openApiCustomisers/operationCustomizers can not be all null for the group:" + this.group);
124125
}
125126

@@ -223,12 +224,12 @@ public List<OperationCustomizer> getOperationCustomizers() {
223224
}
224225

225226
/**
226-
* Gets method filters.
227+
* Gets open api method filters.
227228
*
228-
* @return the method filters
229+
* @return the open api method filters
229230
*/
230-
public List<MethodFilter> getMethodFilters() {
231-
return methodFilters;
231+
public List<OpenApiMethodFilter> getOpenApiMethodFilters() {
232+
return openApiMethodFilters;
232233
}
233234

234235
/**
@@ -249,7 +250,7 @@ public static class Builder {
249250
/**
250251
* The methods filters to apply.
251252
*/
252-
private final List<MethodFilter> methodFilters = new ArrayList<>();
253+
private final List<OpenApiMethodFilter> methodFilters = new ArrayList<>();
253254

254255
/**
255256
* The Group.
@@ -414,7 +415,7 @@ public Builder addOperationCustomizer(OperationCustomizer operationCustomizer) {
414415
* @param methodFilter an additional filter to apply to the matched methods
415416
* @return the builder
416417
*/
417-
public Builder addMethodFilter(MethodFilter methodFilter) {
418+
public Builder addOpenApiMethodFilter(OpenApiMethodFilter methodFilter) {
418419
this.methodFilters.add(methodFilter);
419420
return this;
420421
}

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

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,11 +1081,6 @@ public static class GroupConfig {
10811081
*/
10821082
private List<String> consumesToMatch;
10831083

1084-
/**
1085-
* The method filters to use.
1086-
*/
1087-
private List<MethodFilter> methodFilters;
1088-
10891084
/**
10901085
* Instantiates a new Group config.
10911086
*/
@@ -1103,32 +1098,10 @@ public GroupConfig() {
11031098
* @param producesToMatch the produces to match
11041099
* @param consumesToMatch the consumes to match
11051100
* @param headersToMatch the headers to match
1106-
* @deprecated Use {@link #GroupConfig(String, List, List, List, List, List, List, List, List)}
11071101
*/
1108-
@Deprecated
11091102
public GroupConfig(String group, List<String> pathsToMatch, List<String> packagesToScan,
11101103
List<String> packagesToExclude, List<String> pathsToExclude,
1111-
List<String> producesToMatch, List<String> consumesToMatch, List<String> headersToMatch) {
1112-
this(group, pathsToMatch, packagesToScan, packagesToExclude, pathsToExclude, producesToMatch, consumesToMatch, headersToMatch, new ArrayList<>());
1113-
}
1114-
1115-
/**
1116-
* Instantiates a new Group config.
1117-
*
1118-
* @param group the group
1119-
* @param pathsToMatch the paths to match
1120-
* @param packagesToScan the packages to scan
1121-
* @param packagesToExclude the packages to exclude
1122-
* @param pathsToExclude the paths to exclude
1123-
* @param producesToMatch the produces to match
1124-
* @param consumesToMatch the consumes to match
1125-
* @param headersToMatch the headers to match
1126-
* @param methodFilters the method filters to use
1127-
*/
1128-
public GroupConfig(String group, List<String> pathsToMatch, List<String> packagesToScan,
1129-
List<String> packagesToExclude, List<String> pathsToExclude,
1130-
List<String> producesToMatch, List<String> consumesToMatch, List<String> headersToMatch,
1131-
List<MethodFilter> methodFilters) {
1104+
List<String> producesToMatch,List<String> consumesToMatch,List<String> headersToMatch) {
11321105
this.pathsToMatch = pathsToMatch;
11331106
this.pathsToExclude = pathsToExclude;
11341107
this.packagesToExclude = packagesToExclude;
@@ -1137,7 +1110,6 @@ public GroupConfig(String group, List<String> pathsToMatch, List<String> package
11371110
this.producesToMatch = producesToMatch;
11381111
this.consumesToMatch = consumesToMatch;
11391112
this.headersToMatch = headersToMatch;
1140-
this.methodFilters = methodFilters;
11411113
}
11421114

11431115
/**
@@ -1283,23 +1255,5 @@ public List<String> getProducesToMatch() {
12831255
public void setProducesToMatch(List<String> producesToMatch) {
12841256
this.producesToMatch = producesToMatch;
12851257
}
1286-
1287-
/**
1288-
* Gets the method filters to use.
1289-
*
1290-
* @return the method filters to use
1291-
*/
1292-
public List<MethodFilter> getMethodFilters() {
1293-
return methodFilters;
1294-
}
1295-
1296-
/**
1297-
* Sets the method filters to use.
1298-
*
1299-
* @param methodFilters the method filters to use
1300-
*/
1301-
public void setMethodFilters(List<MethodFilter> methodFilters) {
1302-
this.methodFilters = methodFilters;
1303-
}
13041258
}
13051259
}

springdoc-openapi-common/src/main/java/org/springdoc/core/filters/OpenApiMethodFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*
1919
*/
2020

21-
package org.springdoc.core;
21+
package org.springdoc.core.filters;
2222

2323
import java.lang.reflect.Method;
2424

springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.mockito.junit.jupiter.MockitoExtension;
4444
import org.springdoc.core.AbstractRequestService;
4545
import org.springdoc.core.GenericResponseService;
46+
import org.springdoc.core.filters.OpenApiMethodFilter;
4647
import org.springdoc.core.OpenAPIService;
4748
import org.springdoc.core.OperationService;
4849
import org.springdoc.core.SpringDocConfigProperties;
@@ -127,6 +128,7 @@ void calculatePathFromRouterOperation() {
127128
operationParser,
128129
Optional.empty(),
129130
Optional.empty(),
131+
Optional.empty(),
130132
new SpringDocConfigProperties(),
131133
springDocProviders
132134
);
@@ -197,6 +199,7 @@ void preLoadingModeShouldNotOverwriteServers() throws InterruptedException {
197199
operationParser,
198200
Optional.empty(),
199201
Optional.of(singletonList(openApiCustomiser)),
202+
Optional.empty(),
200203
properties, springDocProviders
201204
);
202205

@@ -215,8 +218,8 @@ void preLoadingModeShouldNotOverwriteServers() throws InterruptedException {
215218

216219
private static class EmptyPathsOpenApiResource extends AbstractOpenApiResource {
217220

218-
EmptyPathsOpenApiResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
219-
super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, springDocConfigProperties, springDocProviders);
221+
EmptyPathsOpenApiResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
222+
super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
220223
}
221224

222225
@Override

springdoc-openapi-javadoc/src/test/java/test/org/springdoc/api/app94/SpringDocApp94Test.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.commons.lang3.RandomStringUtils;
3030
import org.springdoc.core.AbstractRequestService;
3131
import org.springdoc.core.GenericResponseService;
32+
import org.springdoc.core.filters.OpenApiMethodFilter;
3233
import org.springdoc.core.OpenAPIService;
3334
import org.springdoc.core.OperationService;
3435
import org.springdoc.core.SpringDocConfigProperties;
@@ -117,22 +118,24 @@ public RequestMappingHandlerMapping defaultTestHandlerMapping(GreetingController
117118
/**
118119
* Open api resource open api web mvc resource.
119120
*
120-
* @param openAPIBuilderObjectFactory the open api builder object factory
121-
* @param requestBuilder the request builder
122-
* @param responseBuilder the response builder
123-
* @param operationParser the operation parser
124-
* @param operationCustomizers the operation customizers
121+
* @param openAPIBuilderObjectFactory the open api builder object factory
122+
* @param requestBuilder the request builder
123+
* @param responseBuilder the response builder
124+
* @param operationParser the operation parser
125+
* @param operationCustomizers the operation customizers
125126
* @param springDocConfigProperties the spring doc config properties
126-
* @param openApiCustomisers the open api customisers
127+
* @param openApiCustomisers the open api customisers
128+
* @param methodFilters the method filters
129+
* @param springDocProviders the spring doc providers
127130
* @return the open api web mvc resource
128131
*/
129132
@Bean(name = "openApiResource")
130133
public OpenApiWebMvcResource openApiResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder,
131134
OperationService operationParser,Optional<List<OperationCustomizer>> operationCustomizers,
132135
SpringDocConfigProperties springDocConfigProperties,
133-
Optional<List<OpenApiCustomiser>> openApiCustomisers, SpringDocProviders springDocProviders) {
136+
Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters,SpringDocProviders springDocProviders) {
134137
return new OpenApiWebMvcResource(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser,
135-
operationCustomizers, openApiCustomisers, springDocConfigProperties, springDocProviders);
138+
operationCustomizers, openApiCustomisers,methodFilters, springDocConfigProperties, springDocProviders);
136139
}
137140

138141
/**

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public void afterPropertiesSet() {
116116
this.groupedOpenApiResources = groupedOpenApis.stream()
117117
.collect(Collectors.toMap(GroupedOpenApi::getGroup, item ->
118118
{
119-
GroupConfig groupConfig = new GroupConfig(item.getGroup(), item.getPathsToMatch(), item.getPackagesToScan(), item.getPackagesToExclude(), item.getPathsToExclude(), item.getProducesToMatch(), item.getConsumesToMatch(),item.getHeadersToMatch(), item.getMethodFilters());
119+
GroupConfig groupConfig = new GroupConfig(item.getGroup(), item.getPathsToMatch(), item.getPackagesToScan(), item.getPackagesToExclude(), item.getPathsToExclude(), item.getProducesToMatch(), item.getConsumesToMatch(),item.getHeadersToMatch());
120120
springDocConfigProperties.addGroupConfig(groupConfig);
121121
return buildWebFluxOpenApiResource(item);
122122
}
@@ -132,15 +132,16 @@ public void afterPropertiesSet() {
132132
private OpenApiResource buildWebFluxOpenApiResource(GroupedOpenApi item) {
133133
if (!springDocConfigProperties.isUseManagementPort() && !ACTUATOR_DEFAULT_GROUP.equals(item.getGroup()))
134134
return new OpenApiWebfluxResource(item.getGroup(),
135-
defaultOpenAPIBuilder,
136-
requestBuilder,
137-
responseBuilder,
138-
operationParser,
139-
Optional.of(item.getOperationCustomizers()),
140-
Optional.of(item.getOpenApiCustomisers()),
141-
springDocConfigProperties,
142-
springDocProviders
143-
);
135+
defaultOpenAPIBuilder,
136+
requestBuilder,
137+
responseBuilder,
138+
operationParser,
139+
Optional.of(item.getOperationCustomizers()),
140+
Optional.of(item.getOpenApiCustomisers()),
141+
Optional.of(item.getOpenApiMethodFilters()),
142+
springDocConfigProperties,
143+
springDocProviders
144+
);
144145
else
145146
return new OpenApiActuatorResource(item.getGroup(),
146147
defaultOpenAPIBuilder,
@@ -149,6 +150,7 @@ private OpenApiResource buildWebFluxOpenApiResource(GroupedOpenApi item) {
149150
operationParser,
150151
Optional.of(item.getOperationCustomizers()),
151152
Optional.of(item.getOpenApiCustomisers()),
153+
Optional.of(item.getOpenApiMethodFilters()),
152154
springDocConfigProperties,
153155
springDocProviders);
154156
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.swagger.v3.oas.annotations.Operation;
3030
import org.springdoc.core.AbstractRequestService;
3131
import org.springdoc.core.GenericResponseService;
32+
import org.springdoc.core.filters.OpenApiMethodFilter;
3233
import org.springdoc.core.OpenAPIService;
3334
import org.springdoc.core.OperationService;
3435
import org.springdoc.core.SpringDocConfigProperties;
@@ -67,10 +68,12 @@ public class OpenApiActuatorResource extends OpenApiResource {
6768
* @param operationParser the operation parser
6869
* @param operationCustomizers the operation customizers
6970
* @param openApiCustomisers the open api customisers
71+
* @param methodFilters the method filters
7072
* @param springDocConfigProperties the spring doc config properties
73+
* @param springDocProviders the spring doc providers
7174
*/
72-
public OpenApiActuatorResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
73-
super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, springDocConfigProperties, springDocProviders);
75+
public OpenApiActuatorResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
76+
super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
7477
}
7578

7679
/**
@@ -82,10 +85,12 @@ public OpenApiActuatorResource(String groupName, ObjectFactory<OpenAPIService> o
8285
* @param operationParser the operation parser
8386
* @param operationCustomizers the operation customizers
8487
* @param openApiCustomisers the open api customisers
88+
* @param methodFilters the method filters
8589
* @param springDocConfigProperties the spring doc config properties
90+
* @param springDocProviders the spring doc providers
8691
*/
87-
public OpenApiActuatorResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
88-
super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, springDocConfigProperties, springDocProviders);
92+
public OpenApiActuatorResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
93+
super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
8994
}
9095

9196
/**

0 commit comments

Comments
 (0)