From d939561addb9331b92f3aaff2b3d670c5869ce02 Mon Sep 17 00:00:00 2001 From: Andreas Hufler Date: Tue, 11 Mar 2025 11:14:42 +0100 Subject: [PATCH] fix nullability customizer for polymorphic types --- .../default_not_null/NullableCustomizer.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/swagger/customization/default_not_null/NullableCustomizer.java b/src/main/java/it/aboutbits/springboot/toolbox/swagger/customization/default_not_null/NullableCustomizer.java index 48574c5..c57af64 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/swagger/customization/default_not_null/NullableCustomizer.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/swagger/customization/default_not_null/NullableCustomizer.java @@ -5,6 +5,7 @@ import org.springdoc.core.customizers.OpenApiCustomizer; import java.util.ArrayList; +import java.util.Map; public class NullableCustomizer implements OpenApiCustomizer { @Override @@ -15,18 +16,32 @@ public void customise(OpenAPI openApi) { } openApi.getComponents().getSchemas().values() .forEach(schema -> { + var requiredProperties = new ArrayList(); if (((Schema) schema).getProperties() != null) { - var requiredProperties = new ArrayList(); - ((Schema) schema).getProperties().forEach((propertyName, property) -> { - if (property.getTitle() == null || !property.getTitle().equals("NULLABLE")) { - requiredProperties.add(propertyName); - } - if (property.getTitle() != null && property.getTitle().equals("NULLABLE")) { - property.setTitle(null); + var properties = ((Schema) schema).getProperties(); + processProperties(properties, requiredProperties); + } + if (schema.getAllOf() != null) { + schema.getAllOf().forEach(allOfSchema -> { + var allOfSchemaTyped = (Schema) allOfSchema; + if (allOfSchemaTyped.getProperties() != null) { + var properties = allOfSchemaTyped.getProperties(); + processProperties(properties, requiredProperties); } }); - schema.setRequired(requiredProperties); } + schema.setRequired(requiredProperties); }); } + + private static void processProperties(Map properties, ArrayList requiredProperties) { + properties.forEach((propertyName, property) -> { + if (property.getTitle() == null || !property.getTitle().equals("NULLABLE")) { + requiredProperties.add(propertyName); + } + if (property.getTitle() != null && property.getTitle().equals("NULLABLE")) { + property.setTitle(null); + } + }); + } }