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
*/