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..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 @@ -23,6 +23,7 @@ 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; @@ -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..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 @@ -30,6 +30,7 @@ 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; @@ -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..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 @@ -30,6 +30,7 @@ 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; @@ -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": {}