From 240cd25cf4711cd6fc682007169d94e9905bd976 Mon Sep 17 00:00:00 2001 From: nick Date: Mon, 4 Dec 2023 15:26:07 +0200 Subject: [PATCH] tbel fix_bug tbDate parse toString with Object Mapper --- .../thingsboard/script/api/tbel/TbDateTest.java | 17 +++++++++++++++++ .../thingsboard/common/util/JacksonUtil.java | 7 +++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java index ea951d8a51..ecb08b925c 100644 --- a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java +++ b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java @@ -15,6 +15,8 @@ */ package org.thingsboard.script.api.tbel; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -782,4 +784,19 @@ class TbDateTest { Assert.assertEquals(d.getSeconds(), d.getUTCSeconds()); Assert.assertEquals(d.getMilliseconds(), d.getUTCMilliseconds()); } + + @Test + public void tbDateSerializedPMapperTest() { + String stringDateUTC = "2023-09-06T01:04:05.345Z"; + TbDate expectedDate = new TbDate(stringDateUTC); + String serializedTbDate = JacksonUtil.toString(expectedDate); + JsonNode tbDateNode = JacksonUtil.toJsonNode(serializedTbDate); + Assert.assertNotNull(tbDateNode); + ((ObjectNode) tbDateNode).put("test", (String) null); + serializedTbDate = JacksonUtil.toString(tbDateNode); + TbDate actualDate = JacksonUtil.fromStringIgnoreUnknownProperties(serializedTbDate, TbDate.class); + Assert.assertNotNull(actualDate); + Assert.assertEquals(expectedDate.toString(), actualDate.toString()); + Assert.assertEquals(expectedDate.getInstant(), actualDate.getInstant()); + } } diff --git a/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java b/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java index 499c0b55a5..17eb664399 100644 --- a/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java +++ b/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java @@ -52,7 +52,9 @@ import java.util.regex.Pattern; */ public class JacksonUtil { - public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); public static final ObjectMapper PRETTY_SORTED_JSON_MAPPER = JsonMapper.builder() .enable(SerializationFeature.INDENT_OUTPUT) .configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true) @@ -64,7 +66,8 @@ public class JacksonUtil { .build(); public static final ObjectMapper IGNORE_UNKNOWN_PROPERTIES_JSON_MAPPER = JsonMapper.builder() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .build(); + .build() + .registerModule(new JavaTimeModule()); public static ObjectMapper getObjectMapperWithJavaTimeModule() { return new ObjectMapper().registerModule(new JavaTimeModule());