Skip to content

Commit 1af8c2f

Browse files
committed
When extends JpaRepository, using @parameter over the method results in duplicate of the same parameter. Fixes #2038
1 parent 4f9da58 commit 1af8c2f

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

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

+8-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.slf4j.Logger;
3939
import org.slf4j.LoggerFactory;
4040
import org.springdoc.core.models.MethodAttributes;
41+
import org.springdoc.core.service.GenericParameterService;
4142
import org.springdoc.core.service.OperationService;
4243
import org.springdoc.core.utils.SpringDocAnnotationsUtils;
4344

@@ -209,9 +210,14 @@ private Operation buildSearchOperation(HandlerMethod handlerMethod, DataRestRepo
209210
Type type = getParameterType(pName,method,description);
210211
Schema<?> schema = SpringDocAnnotationsUtils.extractSchema(openAPI.getComponents(), type, null, null);
211212
Parameter parameter = getParameterFromAnnotations(openAPI, methodAttributes, method, pName);
212-
if (parameter == null)
213+
if (parameter == null) {
213214
parameter = new Parameter().name(pName).in(ParameterIn.QUERY.toString()).schema(schema);
214-
operation.addParametersItem(parameter);
215+
operation.addParametersItem(parameter);
216+
}
217+
else if (CollectionUtils.isEmpty(operation.getParameters()))
218+
operation.addParametersItem(parameter);
219+
else
220+
GenericParameterService.mergeParameter(operation.getParameters(), parameter);
215221
}
216222
}
217223

springdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/java/test/org/springdoc/api/app37/ProductRepository.java

+8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import ch.qos.logback.core.rolling.helper.DateTokenConverter;
1111
import io.swagger.v3.oas.annotations.Parameter;
12+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
1213

1314
import org.springframework.data.jpa.repository.JpaRepository;
1415
import org.springframework.data.repository.query.Param;
@@ -23,6 +24,13 @@
2324
@RepositoryRestResource(path = "product")
2425
public interface ProductRepository extends JpaRepository<ProductEntity, Long> {
2526

27+
List<ProductEntity> findByPrice( @Parameter(
28+
name = "price",
29+
description = "test desc",
30+
in = ParameterIn.QUERY,
31+
required = true
32+
)
33+
@Param("price")String price);
2634
/**
2735
* 根据商品名称查询商品信息
2836
*

springdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/app37.json

+35-1
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,46 @@
326326
}
327327
}
328328
},
329-
"/product/search/findTopByNameOrderByDateDesc": {
329+
"/product/search/findByPrice": {
330330
"get": {
331331
"tags": [
332332
"product-entity-search-controller"
333333
],
334334
"operationId": "executeSearch-productentity-get_5",
335+
"parameters": [
336+
{
337+
"name": "price",
338+
"in": "query",
339+
"description": "test desc",
340+
"required": true,
341+
"schema": {
342+
"type": "string"
343+
}
344+
}
345+
],
346+
"responses": {
347+
"200": {
348+
"description": "OK",
349+
"content": {
350+
"application/hal+json": {
351+
"schema": {
352+
"$ref": "#/components/schemas/CollectionModelEntityModelProductEntity"
353+
}
354+
}
355+
}
356+
},
357+
"404": {
358+
"description": "Not Found"
359+
}
360+
}
361+
}
362+
},
363+
"/product/search/findTopByNameOrderByDateDesc": {
364+
"get": {
365+
"tags": [
366+
"product-entity-search-controller"
367+
],
368+
"operationId": "executeSearch-productentity-get_6",
335369
"parameters": [
336370
{
337371
"name": "name2",

0 commit comments

Comments
 (0)