From 584faa2e6d13c40e418c64d747e129ab6a38174c Mon Sep 17 00:00:00 2001 From: user Date: Mon, 5 May 2025 20:52:08 +0200 Subject: [PATCH 1/3] Support for @Positive --- .../org/springdoc/core/utils/SchemaUtils.java | 16 +++++---- .../api/v30/app18/HelloController.java | 19 +++++++--- .../api/v31/app18/HelloController.java | 19 +++++++--- .../test/resources/results/3.0.1/app18.json | 35 +++++++++++++++++++ .../test/resources/results/3.1.0/app18.json | 35 +++++++++++++++++++ 5 files changed, 110 insertions(+), 14 deletions(-) diff --git a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java index df0847d61..3085e5392 100644 --- a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java +++ b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java @@ -1,5 +1,8 @@ package org.springdoc.core.utils; +import static org.springdoc.core.utils.Constants.OPENAPI_ARRAY_TYPE; +import static org.springdoc.core.utils.Constants.OPENAPI_STRING_TYPE; + import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.math.BigDecimal; @@ -14,6 +17,9 @@ import java.util.Set; import java.util.stream.Collectors; +import org.springframework.core.KotlinDetector; +import org.springframework.lang.Nullable; + import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import io.swagger.v3.oas.models.media.Schema; @@ -23,17 +29,12 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NegativeOrZero; import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; import jakarta.validation.constraints.Size; import kotlin.reflect.KProperty; import kotlin.reflect.jvm.ReflectJvmMapping; -import org.springframework.core.KotlinDetector; -import org.springframework.lang.Nullable; - -import static org.springdoc.core.utils.Constants.OPENAPI_ARRAY_TYPE; -import static org.springdoc.core.utils.Constants.OPENAPI_STRING_TYPE; - /** * The type Validation utils. * @@ -189,6 +190,9 @@ public static boolean fieldRequired(Field field, @Nullable io.swagger.v3.oas.ann public static void applyValidationsToSchema(Schema schema, List annotations) { annotations.forEach(anno -> { String annotationName = anno.annotationType().getSimpleName(); + if (annotationName.equals(Positive.class.getSimpleName())) { + schema.setMinimum(BigDecimal.ONE); + } if (annotationName.equals(PositiveOrZero.class.getSimpleName())) { schema.setMinimum(BigDecimal.ZERO); } diff --git a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java index 8a567878e..9ba9a2eea 100644 --- a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java +++ b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java @@ -26,16 +26,17 @@ package test.org.springdoc.api.v30.app18; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.constraints.NegativeOrZero; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - /** * The type Hello controller. */ @@ -108,4 +109,14 @@ public String persons6(@NotEmpty @Parameter(description = "persons name") String return "OK"; } + /** + * Persons 7 string. + * + * @param age the age + * @return the string + */ + @GetMapping(value = "/persons7") + public String persons7(@Positive int age) { + return "OK"; + } } diff --git a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java index f02c5bc52..e582691c8 100644 --- a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java +++ b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java @@ -26,16 +26,17 @@ package test.org.springdoc.api.v31.app18; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.constraints.NegativeOrZero; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - /** * The type Hello controller. */ @@ -108,4 +109,14 @@ public String persons6(@NotEmpty @Parameter(description = "persons name") String return "OK"; } + /** + * Persons 7 string. + * + * @param age the age + * @return the string + */ + @GetMapping(value = "/persons7") + public String persons7(@Positive int age) { + return "OK"; + } } diff --git a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app18.json b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app18.json index f36a238f9..d86a9380d 100644 --- a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app18.json +++ b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app18.json @@ -222,6 +222,41 @@ } } } + }, + "/persons7": { + "get": { + "tags": [ + "hello-controller" + ], + "summary": "Persons 7 string.", + "description": "Persons 7 string.", + "operationId": "persons7", + "parameters": [ + { + "name": "age", + "in": "query", + "description": "the age", + "required": true, + "schema": { + "minimum": 1, + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "the string", + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + } + } + } + } } }, "components": {} diff --git a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app18.json b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app18.json index 336311b8c..02b6f1557 100644 --- a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app18.json +++ b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app18.json @@ -222,6 +222,41 @@ } } } + }, + "/persons7": { + "get": { + "tags": [ + "hello-controller" + ], + "summary": "Persons 7 string.", + "description": "Persons 7 string.", + "operationId": "persons7", + "parameters": [ + { + "name": "age", + "in": "query", + "description": "the age", + "required": true, + "schema": { + "minimum": 1, + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "the string", + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + } + } + } + } } }, "components": {} From 01175c5c9e07369f180ca6864f0f7ff466889772 Mon Sep 17 00:00:00 2001 From: mpleine Date: Wed, 7 May 2025 17:42:17 +0200 Subject: [PATCH 2/3] resorted imports --- .../java/org/springdoc/core/utils/SchemaUtils.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java index 3085e5392..2bf3dad17 100644 --- a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java +++ b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SchemaUtils.java @@ -1,8 +1,5 @@ package org.springdoc.core.utils; -import static org.springdoc.core.utils.Constants.OPENAPI_ARRAY_TYPE; -import static org.springdoc.core.utils.Constants.OPENAPI_STRING_TYPE; - import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.math.BigDecimal; @@ -17,9 +14,6 @@ import java.util.Set; import java.util.stream.Collectors; -import org.springframework.core.KotlinDetector; -import org.springframework.lang.Nullable; - import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import io.swagger.v3.oas.models.media.Schema; @@ -35,6 +29,12 @@ import kotlin.reflect.KProperty; import kotlin.reflect.jvm.ReflectJvmMapping; +import org.springframework.core.KotlinDetector; +import org.springframework.lang.Nullable; + +import static org.springdoc.core.utils.Constants.OPENAPI_ARRAY_TYPE; +import static org.springdoc.core.utils.Constants.OPENAPI_STRING_TYPE; + /** * The type Validation utils. * From a74ddd53d945db932a418035c9eb8c7e2c43b83e Mon Sep 17 00:00:00 2001 From: mpleine Date: Wed, 7 May 2025 17:46:19 +0200 Subject: [PATCH 3/3] resorted imports --- .../test/org/springdoc/api/v30/app18/HelloController.java | 8 ++++---- .../test/org/springdoc/api/v31/app18/HelloController.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java index 9ba9a2eea..ebbc2c21e 100644 --- a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java +++ b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app18/HelloController.java @@ -26,10 +26,6 @@ package test.org.springdoc.api.v30.app18; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.constraints.NegativeOrZero; import jakarta.validation.constraints.NotBlank; @@ -37,6 +33,10 @@ import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + /** * The type Hello controller. */ diff --git a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java index e582691c8..e26c170b6 100644 --- a/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java +++ b/springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app18/HelloController.java @@ -26,10 +26,6 @@ package test.org.springdoc.api.v31.app18; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.constraints.NegativeOrZero; import jakarta.validation.constraints.NotBlank; @@ -37,6 +33,10 @@ import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.PositiveOrZero; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + /** * The type Hello controller. */