Skip to content

Commit e1bd75b

Browse files
committed
Path variable mapped improperly in swagger-ui. Fixes #2028
1 parent 3e2fd5e commit e1bd75b

File tree

9 files changed

+75
-20
lines changed

9 files changed

+75
-20
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocConfiguration.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.springdoc.core.customizers.OpenApiBuilderCustomizer;
6262
import org.springdoc.core.customizers.PropertyCustomizer;
6363
import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
64+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
6465
import org.springdoc.core.models.GroupedOpenApi;
6566
import org.springdoc.core.parsers.ReturnTypeParser;
6667
import org.springdoc.core.properties.SpringDocConfigProperties;
@@ -102,7 +103,6 @@
102103
import org.springframework.context.annotation.Conditional;
103104
import org.springframework.context.annotation.Configuration;
104105
import org.springframework.context.annotation.Lazy;
105-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
106106
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
107107
import org.springframework.http.HttpStatus;
108108
import org.springframework.http.ResponseEntity;
@@ -174,8 +174,8 @@ static BeanFactoryPostProcessor springdocBeanFactoryPostProcessor2() {
174174
*/
175175
@Bean
176176
@Lazy(false)
177-
StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer() {
178-
return new StandardReflectionParameterNameDiscoverer();
177+
SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer() {
178+
return new SpringDocParameterNameDiscoverer();
179179
}
180180

181181
/**

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocDataRestConfiguration.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springdoc.core.data.DataRestResponseService;
3737
import org.springdoc.core.data.DataRestRouterOperationService;
3838
import org.springdoc.core.data.DataRestTagsService;
39+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
3940
import org.springdoc.core.properties.SpringDocConfigProperties;
4041
import org.springdoc.core.providers.DataRestHalProvider;
4142
import org.springdoc.core.providers.ObjectMapperProvider;
@@ -60,7 +61,6 @@
6061
import org.springframework.context.annotation.ImportRuntimeHints;
6162
import org.springframework.context.annotation.Lazy;
6263
import org.springframework.context.annotation.Primary;
63-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
6464
import org.springframework.data.domain.Sort;
6565
import org.springframework.data.mapping.context.PersistentEntities;
6666
import org.springframework.data.querydsl.binding.QuerydslBindingsFactory;
@@ -192,7 +192,7 @@ DataRestOperationService dataRestOperationBuilder(DataRestRequestService dataRes
192192
@Bean
193193
@ConditionalOnMissingBean
194194
@Lazy(false)
195-
DataRestRequestService dataRestRequestBuilder(StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer, GenericParameterService parameterBuilder,
195+
DataRestRequestService dataRestRequestBuilder(SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer, GenericParameterService parameterBuilder,
196196
RequestBodyService requestBodyService, AbstractRequestService requestBuilder, SpringDocDataRestUtils springDocDataRestUtils) {
197197
return new DataRestRequestService(localSpringDocParameterNameDiscoverer, parameterBuilder,
198198
requestBodyService, requestBuilder, springDocDataRestUtils);

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/data/DataRestRequestService.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import io.swagger.v3.oas.models.media.StringSchema;
4242
import io.swagger.v3.oas.models.parameters.Parameter;
4343
import org.apache.commons.lang3.ArrayUtils;
44+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
4445
import org.springdoc.core.extractor.DelegatingMethodParameter;
4546
import org.springdoc.core.models.MethodAttributes;
4647
import org.springdoc.core.models.ParameterInfo;
@@ -52,7 +53,6 @@
5253
import org.springdoc.core.utils.SpringDocDataRestUtils;
5354

5455
import org.springframework.core.MethodParameter;
55-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
5656
import org.springframework.core.annotation.AnnotatedElementUtils;
5757
import org.springframework.data.rest.core.mapping.ResourceMetadata;
5858
import org.springframework.data.rest.webmvc.PersistentEntityResource;
@@ -72,7 +72,7 @@ public class DataRestRequestService {
7272
/**
7373
* The Local spring doc parameter name discoverer.
7474
*/
75-
private final StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
75+
private final SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
7676

7777
/**
7878
* The Parameter builder.
@@ -103,7 +103,7 @@ public class DataRestRequestService {
103103
* @param requestBuilder the request builder
104104
* @param springDocDataRestUtils the spring doc data rest utils
105105
*/
106-
public DataRestRequestService(StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer, GenericParameterService parameterBuilder,
106+
public DataRestRequestService(SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer, GenericParameterService parameterBuilder,
107107
RequestBodyService requestBodyService, AbstractRequestService requestBuilder, SpringDocDataRestUtils springDocDataRestUtils) {
108108
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
109109
this.parameterBuilder = parameterBuilder;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
*
3+
* *
4+
* * *
5+
* * * *
6+
* * * * * Copyright 2019-2023 the original author or authors.
7+
* * * * *
8+
* * * * * Licensed under the Apache License, Version 2.0 (the "License");
9+
* * * * * you may not use this file except in compliance with the License.
10+
* * * * * You may obtain a copy of the License at
11+
* * * * *
12+
* * * * * https://www.apache.org/licenses/LICENSE-2.0
13+
* * * * *
14+
* * * * * Unless required by applicable law or agreed to in writing, software
15+
* * * * * distributed under the License is distributed on an "AS IS" BASIS,
16+
* * * * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
* * * * * See the License for the specific language governing permissions and
18+
* * * * * limitations under the License.
19+
* * * *
20+
* * *
21+
* *
22+
*
23+
*/
24+
package org.springdoc.core.discoverer;
25+
26+
import java.lang.reflect.Method;
27+
import java.util.Objects;
28+
29+
import org.apache.commons.lang3.ArrayUtils;
30+
31+
import org.springframework.core.DefaultParameterNameDiscoverer;
32+
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
33+
import org.springframework.lang.Nullable;
34+
35+
/**
36+
* The type Spring doc parameter name discoverer.
37+
*
38+
* @author bnasslahsen
39+
*/
40+
public class SpringDocParameterNameDiscoverer extends DefaultParameterNameDiscoverer {
41+
42+
/**
43+
* The Standard reflection parameter name discoverer.
44+
*/
45+
private final StandardReflectionParameterNameDiscoverer standardReflectionParameterNameDiscoverer = new StandardReflectionParameterNameDiscoverer();
46+
47+
@Override
48+
@Nullable
49+
public String[] getParameterNames(Method method) {
50+
String[] params = super.getParameterNames(method);
51+
if(ArrayUtils.isEmpty(params) || Objects.requireNonNull(params).length!=method.getParameters().length)
52+
params = standardReflectionParameterNameDiscoverer.getParameterNames(method);
53+
return params;
54+
}
55+
56+
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/AbstractRequestService.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import org.apache.commons.lang3.ArrayUtils;
6565
import org.apache.commons.lang3.StringUtils;
6666
import org.springdoc.core.customizers.ParameterCustomizer;
67+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
6768
import org.springdoc.core.extractor.DelegatingMethodParameter;
6869
import org.springdoc.core.models.MethodAttributes;
6970
import org.springdoc.core.models.ParameterId;
@@ -74,7 +75,6 @@
7475
import org.springdoc.core.utils.SpringDocAnnotationsUtils;
7576

7677
import org.springframework.core.MethodParameter;
77-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
7878
import org.springframework.core.annotation.AnnotatedElementUtils;
7979
import org.springframework.http.HttpMethod;
8080
import org.springframework.util.ClassUtils;
@@ -163,7 +163,7 @@ public abstract class AbstractRequestService {
163163
/**
164164
* The Local spring doc parameter name discoverer.
165165
*/
166-
private final StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
166+
private final SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
167167

168168
/**
169169
* The Parameter customizers.
@@ -191,7 +191,7 @@ public abstract class AbstractRequestService {
191191
*/
192192
protected AbstractRequestService(GenericParameterService parameterBuilder, RequestBodyService requestBodyService,
193193
OperationService operationService, Optional<List<ParameterCustomizer>> parameterCustomizers,
194-
StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
194+
SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
195195
super();
196196
this.parameterBuilder = parameterBuilder;
197197
this.requestBodyService = requestBodyService;

springdoc-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/core/configuration/SpringDocWebFluxConfiguration.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.springdoc.core.customizers.OperationCustomizer;
3333
import org.springdoc.core.customizers.ParameterCustomizer;
3434
import org.springdoc.core.customizers.RouterOperationCustomizer;
35+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
3536
import org.springdoc.core.filters.OpenApiMethodFilter;
3637
import org.springdoc.core.parsers.ReturnTypeParser;
3738
import org.springdoc.core.properties.SpringDocConfigProperties;
@@ -68,7 +69,6 @@
6869
import org.springframework.context.annotation.Bean;
6970
import org.springframework.context.annotation.Configuration;
7071
import org.springframework.context.annotation.Lazy;
71-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
7272

7373
import static org.springdoc.core.utils.Constants.SPRINGDOC_ENABLED;
7474
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_MANAGEMENT_PORT;
@@ -132,7 +132,7 @@ OpenApiWebfluxResource openApiResource(ObjectFactory<OpenAPIService> openAPIBuil
132132
RequestService requestBuilder(GenericParameterService parameterBuilder, RequestBodyService requestBodyService,
133133
OperationService operationService,
134134
Optional<List<ParameterCustomizer>> parameterCustomizers,
135-
StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
135+
SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
136136
return new RequestService(parameterBuilder, requestBodyService,
137137
operationService, parameterCustomizers, localSpringDocParameterNameDiscoverer);
138138
}

springdoc-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/core/service/RequestService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
import java.util.Optional;
2929

3030
import org.springdoc.core.customizers.ParameterCustomizer;
31+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
3132
import org.springdoc.core.service.AbstractRequestService;
3233
import org.springdoc.core.service.GenericParameterService;
3334
import org.springdoc.core.service.OperationService;
3435
import org.springdoc.core.service.RequestBodyService;
3536

36-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
3737
import org.springframework.http.codec.multipart.FilePart;
3838
import org.springframework.http.server.reactive.ServerHttpRequest;
3939
import org.springframework.http.server.reactive.ServerHttpResponse;
@@ -66,7 +66,7 @@ public class RequestService extends AbstractRequestService {
6666
*/
6767
public RequestService(GenericParameterService parameterBuilder, RequestBodyService requestBodyService,
6868
OperationService operationService, Optional<List<ParameterCustomizer>> parameterCustomizers,
69-
StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
69+
SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
7070
super(parameterBuilder, requestBodyService, operationService, parameterCustomizers, localSpringDocParameterNameDiscoverer);
7171
}
7272
}

springdoc-openapi-starter-webmvc-api/src/main/java/org/springdoc/webmvc/core/configuration/SpringDocWebMvcConfiguration.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.springdoc.core.customizers.OperationCustomizer;
3333
import org.springdoc.core.customizers.ParameterCustomizer;
3434
import org.springdoc.core.customizers.RouterOperationCustomizer;
35+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
3536
import org.springdoc.core.filters.OpenApiMethodFilter;
3637
import org.springdoc.core.parsers.ReturnTypeParser;
3738
import org.springdoc.core.properties.SpringDocConfigProperties;
@@ -69,7 +70,6 @@
6970
import org.springframework.context.annotation.Bean;
7071
import org.springframework.context.annotation.Configuration;
7172
import org.springframework.context.annotation.Lazy;
72-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
7373
import org.springframework.web.servlet.ModelAndView;
7474
import org.springframework.web.servlet.function.RouterFunction;
7575
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@@ -141,7 +141,7 @@ OpenApiWebMvcResource openApiResource(ObjectFactory<OpenAPIService> openAPIBuild
141141
@Lazy(false)
142142
RequestService requestBuilder(GenericParameterService parameterBuilder, RequestBodyService requestBodyService,
143143
OperationService operationService, Optional<List<ParameterCustomizer>> parameterCustomizers,
144-
StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
144+
SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
145145
return new RequestService(parameterBuilder, requestBodyService,
146146
operationService, parameterCustomizers, localSpringDocParameterNameDiscoverer);
147147
}

springdoc-openapi-starter-webmvc-api/src/main/java/org/springdoc/webmvc/core/service/RequestService.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@
2828
import java.util.Optional;
2929

3030
import org.springdoc.core.customizers.ParameterCustomizer;
31+
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
3132
import org.springdoc.core.service.AbstractRequestService;
3233
import org.springdoc.core.service.GenericParameterService;
3334
import org.springdoc.core.service.OperationService;
3435
import org.springdoc.core.service.RequestBodyService;
3536

36-
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
37-
3837
import static org.springdoc.core.utils.SpringDocUtils.getConfig;
3938

4039
/**
@@ -63,7 +62,7 @@ public class RequestService extends AbstractRequestService {
6362
*/
6463
public RequestService(GenericParameterService parameterBuilder, RequestBodyService requestBodyService,
6564
OperationService operationService, Optional<List<ParameterCustomizer>> parameterCustomizers,
66-
StandardReflectionParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
65+
SpringDocParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
6766
super(parameterBuilder, requestBodyService, operationService, parameterCustomizers, localSpringDocParameterNameDiscoverer);
6867
}
6968
}

0 commit comments

Comments
 (0)