From 0fa97af9226197e92da9f49fef25d6c2c0e2525d Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Wed, 11 Mar 2026 14:26:06 +0200 Subject: [PATCH] fixed FeaturesInfo class, added ability to manually set json property order --- .../server/config/SwaggerConfiguration.java | 17 +++++++++++++++++ .../server/common/data/FeaturesInfo.java | 10 +++++----- 2 files changed, 22 insertions(+), 5 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 b8ec75679e..f2d867ddb6 100644 --- a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java +++ b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.config; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -817,6 +818,22 @@ public class SwaggerConfiguration { } private static List resolvePropertyOrder(Class cls, com.fasterxml.jackson.databind.BeanDescription beanDesc) { + // If an explicit @JsonPropertyOrder is present on the class or any directly implemented + // interface, honour it directly. Walk up the hierarchy so annotations on superclasses + // and their interfaces are also found. + for (Class c = cls; c != null && c != Object.class; c = c.getSuperclass()) { + JsonPropertyOrder propOrder = c.getAnnotation(JsonPropertyOrder.class); + if (propOrder != null && !propOrder.alphabetic() && propOrder.value().length > 0) { + return Arrays.asList(propOrder.value()); + } + for (Class iface : c.getInterfaces()) { + propOrder = iface.getAnnotation(JsonPropertyOrder.class); + if (propOrder != null && !propOrder.alphabetic() && propOrder.value().length > 0) { + return Arrays.asList(propOrder.value()); + } + } + } + // Map backing field names to their JSON property names (respects @JsonProperty) Map fieldToJsonName = new LinkedHashMap<>(); LinkedHashSet getterOnlyNames = new LinkedHashSet<>(); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/FeaturesInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/FeaturesInfo.java index 2a3b95ba0c..49d0228256 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/FeaturesInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/FeaturesInfo.java @@ -19,9 +19,9 @@ import lombok.Data; @Data public class FeaturesInfo { - boolean isEmailEnabled; - boolean isSmsEnabled; - boolean isNotificationEnabled; - boolean isOauthEnabled; - boolean isTwoFaEnabled; + boolean emailEnabled; + boolean smsEnabled; + boolean notificationEnabled; + boolean oauthEnabled; + boolean twoFaEnabled; }