From cf93b594331544971f5224f21ba9cd4007232079 Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Mon, 6 Apr 2026 16:46:28 +0300 Subject: [PATCH] Remove ContactBased and HasId pre-registration Pre-registering abstract intermediate types pulls in their full inheritance chain (UUIDBased, HasUUID) as broken $ref entries. Leave *Object schemas for these types as-is. --- .../server/config/SwaggerConfiguration.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java index 072fe61252..9797042ed9 100644 --- a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java +++ b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java @@ -62,10 +62,8 @@ import org.springframework.context.annotation.Profile; import org.springframework.http.HttpStatus; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.StringUtils; -import org.thingsboard.server.common.data.ContactBased; import org.thingsboard.server.common.data.cf.CalculatedField; import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; -import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.exception.ThingsboardCredentialsExpiredResponse; import org.thingsboard.server.exception.ThingsboardErrorResponse; import org.thingsboard.server.service.security.auth.rest.LoginRequest; @@ -359,16 +357,11 @@ public class SwaggerConfiguration { .addSchemas("ThingsboardErrorResponse", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(ThingsboardErrorResponse.class)).schema) .addSchemas("ThingsboardCredentialsExpiredResponse", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(ThingsboardCredentialsExpiredResponse.class)).schema) .addSchemas("ThingsboardErrorCode", errorCodeSchema) - // Pre-register types to prevent springdoc resolution-order issues: - // - Types referenced with @JsonIgnoreProperties on fields (e.g. CalculatedField - // via EntityExportData.calculatedFields) to prevent field-level ignore lists - // from polluting the global schema. - // - Intermediate interfaces/classes (e.g. ContactBased, HasId) that springdoc - // only creates as "*Object" byproducts; pre-registering the base name lets - // the duplicate removal pass clean them up. - .addSchemas("CalculatedField", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(CalculatedField.class)).schema) - .addSchemas("ContactBased", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(ContactBased.class)).schema) - .addSchemas("HasId", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(HasId.class)).schema); + // Pre-register types referenced with @JsonIgnoreProperties on fields + // (e.g. CalculatedField via EntityExportData.calculatedFields) to prevent + // field-level ignore lists from polluting the global schema when resolution + // order varies. + .addSchemas("CalculatedField", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(CalculatedField.class)).schema); } private OperationCustomizer operationCustomizer() {