diff --git a/pom.xml b/pom.xml index a93c9a51f..a7a094031 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ 0.7.0 1.5.0 - 2.2.48 + 2.2.49 5.32.2 1.13.1 0.9.1 diff --git a/springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java b/springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java index 9b6d5ffa5..f9cddd859 100644 --- a/springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java +++ b/springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java @@ -385,9 +385,6 @@ protected OpenAPI getOpenApi(String serverBaseUrl, Locale locale) { } getPaths(mappingsMap, finalLocale, openAPI); - if (OpenApiVersion.OPENAPI_3_1 == springDocConfigProperties.getApiDocs().getVersion()) - handleComponentSchemaTypes(openAPI); - if (springDocConfigProperties.isTrimKotlinIndent()) this.trimIndent(openAPI); @@ -458,20 +455,6 @@ private void trimIndent(OpenAPI openAPI) { trimPaths(openAPI); } - /** - * Fix component schemas for OAS 3.1 post-processing. - * - * @param openAPI the open api - */ - private static void handleComponentSchemaTypes(OpenAPI openAPI) { - if (openAPI.getComponents() == null || openAPI.getComponents().getSchemas() == null) { - return; - } - for (Schema schema : openAPI.getComponents().getSchemas().values()) { - SpringDocUtils.fixNullOnlyAdditionalProperties(schema); - } - } - /** * Trim the indent for descriptions in the 'components' of open api. * diff --git a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/ObjectMapperProvider.java b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/ObjectMapperProvider.java index 9b5962438..11124f58e 100644 --- a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/ObjectMapperProvider.java +++ b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/ObjectMapperProvider.java @@ -35,7 +35,6 @@ import io.swagger.v3.core.util.Yaml; import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.core.util.PrimitiveType; import io.swagger.v3.oas.models.media.Schema; import org.springdoc.core.mixins.SortedOpenAPIMixin; import org.springdoc.core.mixins.SortedOpenAPIMixin31; @@ -81,14 +80,10 @@ public ObjectMapperProvider(SpringDocConfigProperties springDocConfigProperties) if (springDocConfigProperties.isExplicitObjectSchema()) { System.setProperty(Schema.EXPLICIT_OBJECT_SCHEMA_PROPERTY, "true"); } - else { - PrimitiveType.explicitObjectType = false; - } } else { jsonMapper = Json.mapper(); yamlMapper = Yaml.mapper(); - PrimitiveType.explicitObjectType = null; } } 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 cecafd84b..2b01d72d7 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 @@ -12,8 +12,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import io.swagger.v3.oas.models.SpecVersion; import io.swagger.v3.oas.models.media.Schema; -import jakarta.validation.Constraint; import jakarta.validation.OverridesAttribute; import jakarta.validation.constraints.DecimalMax; import jakarta.validation.constraints.DecimalMin; @@ -296,6 +296,7 @@ else if (OPENAPI_STRING_TYPE.equals(type)) { schema.setMaximum(BigDecimal.valueOf(((Range) anno).max())); } }); + fixOAS31ExclusiveConstraints(schema); if (schema!=null && annotatedNotNull(annotations)) { String specVersion = schema.getSpecVersion().name(); if (!"V30".equals(specVersion)) { @@ -541,4 +542,30 @@ private static JsonProperty getJsonProperty(Field f) { if (g != null) return g.getAnnotation(JsonProperty.class); return null; } + + /** + * Swagger-core 2.2.49 introduced so that {@link Positive} and {@link Negative} are introspected. + * It does not correctly use the fact that exclusiveMinimum/exclusiveMaximum are values in OAS31. + *

+ * Tracked under swagger-core#5170. + * + * @param schema the schema to fix + */ + public static void fixOAS31ExclusiveConstraints(Schema schema) { + if (schema == null) { + return; + } + if (schema.getSpecVersion().equals(SpecVersion.V31)) { + if (schema.getExclusiveMaximumValue() != null && schema.getMaximum() != null) { + if (schema.getMaximum().compareTo(schema.getExclusiveMaximumValue()) == 0) { + schema.setMaximum(null); + } + } + if (schema.getExclusiveMinimumValue() != null && schema.getMinimum() != null) { + if (schema.getMinimum().compareTo(schema.getExclusiveMinimumValue()) == 0) { + schema.setMinimum(null); + } + } + } + } } diff --git a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SpringDocUtils.java b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SpringDocUtils.java index e705d1b09..7441f5a51 100644 --- a/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SpringDocUtils.java +++ b/springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SpringDocUtils.java @@ -187,6 +187,8 @@ else if (schema.getItems() != null && schema.getItems().getType() != null /** * Fix additionalProperties incorrectly set to {"type": "null"} when @Nullable * propagates from a Map field to its Object value type (resolved as "any type" = {}). + *

+ * Tracked under swagger-core#5115. * * @param schema the schema to fix */