From 4d6600834cfc4a4f1cdf159b5634f842faad741a Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Thu, 6 Aug 2026 16:29:06 +0300 Subject: [PATCH] Add OpenAPI discriminator mapping to polymorphic LwM2M and job types --- .../lwm2m/LwM2MBootstrapClientCredential.java | 11 +++++++++++ .../credentials/lwm2m/LwM2MClientCredential.java | 11 +++++++++++ .../bootstrap/LwM2MBootstrapServerCredential.java | 11 +++++++++++ .../thingsboard/server/common/data/job/task/Task.java | 8 ++++++++ .../server/common/data/job/task/TaskResult.java | 8 ++++++++ 5 files changed, 49 insertions(+) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MBootstrapClientCredential.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MBootstrapClientCredential.java index 9041de33f0..008c01e7de 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MBootstrapClientCredential.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MBootstrapClientCredential.java @@ -19,7 +19,18 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; +import io.swagger.v3.oas.annotations.media.Schema; +@Schema( + discriminatorProperty = "securityMode", + discriminatorMapping = { + @DiscriminatorMapping(value = "NO_SEC", schema = NoSecBootstrapClientCredential.class), + @DiscriminatorMapping(value = "PSK", schema = PSKBootstrapClientCredential.class), + @DiscriminatorMapping(value = "RPK", schema = RPKBootstrapClientCredential.class), + @DiscriminatorMapping(value = "X509", schema = X509BootstrapClientCredential.class) + } +) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, property = "securityMode") diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MClientCredential.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MClientCredential.java index 0ac1911d81..3f939cbd5b 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MClientCredential.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/credentials/lwm2m/LwM2MClientCredential.java @@ -19,7 +19,18 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; +import io.swagger.v3.oas.annotations.media.Schema; +@Schema( + discriminatorProperty = "securityConfigClientMode", + discriminatorMapping = { + @DiscriminatorMapping(value = "NO_SEC", schema = NoSecClientCredential.class), + @DiscriminatorMapping(value = "PSK", schema = PSKClientCredential.class), + @DiscriminatorMapping(value = "RPK", schema = RPKClientCredential.class), + @DiscriminatorMapping(value = "X509", schema = X509ClientCredential.class) + } +) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, property = "securityConfigClientMode") diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MBootstrapServerCredential.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MBootstrapServerCredential.java index 71e00cd354..1e6e3d056e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MBootstrapServerCredential.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MBootstrapServerCredential.java @@ -19,10 +19,21 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; +import io.swagger.v3.oas.annotations.media.Schema; import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MSecurityMode; import java.io.Serializable; +@Schema( + discriminatorProperty = "securityMode", + discriminatorMapping = { + @DiscriminatorMapping(value = "NO_SEC", schema = NoSecLwM2MBootstrapServerCredential.class), + @DiscriminatorMapping(value = "PSK", schema = PSKLwM2MBootstrapServerCredential.class), + @DiscriminatorMapping(value = "RPK", schema = RPKLwM2MBootstrapServerCredential.class), + @DiscriminatorMapping(value = "X509", schema = X509LwM2MBootstrapServerCredential.class) + } +) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, property = "securityMode") diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java b/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java index a881780012..bf12d50ece 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java @@ -20,6 +20,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.experimental.SuperBuilder; @@ -29,6 +31,12 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.job.JobType; @Data +@Schema( + discriminatorProperty = "jobType", + discriminatorMapping = { + @DiscriminatorMapping(value = "DUMMY", schema = DummyTask.class) + } +) @JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType") @JsonSubTypes({ diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/job/task/TaskResult.java b/common/data/src/main/java/org/thingsboard/server/common/data/job/task/TaskResult.java index e882c74eb6..ac55f14b0f 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/job/task/TaskResult.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/job/task/TaskResult.java @@ -20,12 +20,20 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.NoArgsConstructor; import org.thingsboard.server.common.data.job.JobType; @Data @NoArgsConstructor +@Schema( + discriminatorProperty = "jobType", + discriminatorMapping = { + @DiscriminatorMapping(value = "DUMMY", schema = DummyTaskResult.class) + } +) @JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType") @JsonSubTypes({