From 6ff5d429ff02424774f15333a696629d46adcd57 Mon Sep 17 00:00:00 2001 From: daniel-shuy Date: Wed, 8 Jun 2022 16:53:34 +0800 Subject: [PATCH] Support PageableDefault#value() PageableDefault#value() is an alias for PageableDefault#size() --- ...stDelegatingMethodParameterCustomizer.java | 18 +++++- .../springdoc/api/app13/HelloController.java | 6 ++ .../src/test/resources/results/app13.json | 56 +++++++++++++++++++ .../api/v30/app176/HelloController.java | 6 ++ .../test/resources/results/3.0.1/app176.json | 56 +++++++++++++++++++ 5 files changed, 140 insertions(+), 2 deletions(-) diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java index 36b2064b7..6be158bf8 100644 --- a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java +++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java @@ -26,6 +26,7 @@ import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Optional; import com.fasterxml.jackson.core.JsonProcessingException; @@ -716,8 +717,21 @@ private String getDefaultValue(String parameterName, PageableDefault pageableDef String defaultValue = null; switch (parameterName) { case "size": - if (pageableDefault != null) - defaultValue = String.valueOf(pageableDefault.size()); + if (pageableDefault != null) { + // "size" is aliased as "value" + int size = pageableDefault.size(); + Object defaultSize; + try { + defaultSize = PageableDefault.class.getMethod("size").getDefaultValue(); + } catch (NoSuchMethodException e) { + LOGGER.warn(e.getMessage()); + defaultSize = null; + } + if (Objects.deepEquals(size, defaultSize)) { + size = pageableDefault.value(); + } + defaultValue = String.valueOf(size); + } else if (isRepositoryRestConfigurationPresent()) defaultValue = String.valueOf(optionalRepositoryRestConfigurationProvider.get().getRepositoryRestConfiguration().getDefaultPageSize()); else if (isSpringDataWebPropertiesPresent()) diff --git a/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java b/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java index faf772467..0cd0629fa 100644 --- a/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java +++ b/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java @@ -57,4 +57,10 @@ public String getPatientList3(@PageableDefault(size = 100) @ParameterObject Pageable pageable) { return "bla"; } + + @GetMapping("/test4") + public String getPatientList4(@PageableDefault(100) + @ParameterObject Pageable pageable) { + return "bla"; + } } diff --git a/springdoc-openapi-data-rest/src/test/resources/results/app13.json b/springdoc-openapi-data-rest/src/test/resources/results/app13.json index dbf118026..5716a081a 100644 --- a/springdoc-openapi-data-rest/src/test/resources/results/app13.json +++ b/springdoc-openapi-data-rest/src/test/resources/results/app13.json @@ -11,6 +11,62 @@ } ], "paths": { + "/test4": { + "get": { + "tags": [ + "hello-controller" + ], + "operationId": "getPatientList4", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 100 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/hal+json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, "/test3": { "get": { "tags": [ diff --git a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java index b74114c5d..644e8b84f 100644 --- a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java +++ b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java @@ -62,4 +62,10 @@ public String getPatientList3(@PageableDefault(size = 100) @ParameterObject Pageable pageable) { return "bla"; } + + @GetMapping("/test4") + public String getPatientList4(@PageableDefault(100) + @ParameterObject Pageable pageable) { + return "bla"; + } } diff --git a/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json b/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json index 694c5ea03..802ad99f5 100644 --- a/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json +++ b/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json @@ -11,6 +11,62 @@ } ], "paths": { + "/test4": { + "get": { + "tags": [ + "hello-controller" + ], + "operationId": "getPatientList4", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 100 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, "/test3": { "get": { "tags": [