]> git.basschouten.com Git - openhab-addons.git/commitdiff
[mapdb] Explicitly set date format for serialization (#16657)
authorHolger Friedrich <mail@holger-friedrich.de>
Sun, 28 Apr 2024 18:14:31 +0000 (20:14 +0200)
committerGitHub <noreply@github.com>
Sun, 28 Apr 2024 18:14:31 +0000 (20:14 +0200)
Between Java 17 and Java 21, serialization of Date has changed due to CLDR 42 which uses a narrow non-breaking space.
To ease switching JDK versions, the serialization format is explicitly set to the Java 17 format when GsonBuilder is used.

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java
bundles/org.openhab.persistence.mapdb/src/test/java/org/openhab/persistence/mapdb/StateTypeAdapterTest.java

index 7461c9ecb5d82ee01a57a7f5503de58ace95c293..38857b1909c3081aae6c7017d8ee5513a17aee33 100644 (file)
@@ -35,6 +35,7 @@ import org.mapdb.DBMaker;
 import org.openhab.core.OpenHAB;
 import org.openhab.core.common.ThreadPoolManager;
 import org.openhab.core.items.Item;
+import org.openhab.core.library.types.DateTimeType;
 import org.openhab.core.persistence.FilterCriteria;
 import org.openhab.core.persistence.HistoricItem;
 import org.openhab.core.persistence.PersistenceItemInfo;
@@ -82,8 +83,8 @@ public class MapDbPersistenceService implements QueryablePersistenceService {
     private @NonNullByDefault({}) DB db;
     private @NonNullByDefault({}) Map<String, String> map;
 
-    private transient Gson mapper = new GsonBuilder().registerTypeHierarchyAdapter(State.class, new StateTypeAdapter())
-            .create();
+    private transient Gson mapper = new GsonBuilder().setDateFormat(DateTimeType.DATE_PATTERN_JSON_COMPAT)
+            .registerTypeHierarchyAdapter(State.class, new StateTypeAdapter()).create();
 
     @Activate
     public void activate() {
index 7350092adfa1e8f70981ff9e77292f2b7986ed95..ec83fa5944b707548f208925d1606a43f09582f8 100644 (file)
@@ -24,6 +24,7 @@ import java.util.stream.Stream;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
+import org.openhab.core.library.types.DateTimeType;
 import org.openhab.core.library.types.DecimalType;
 import org.openhab.core.library.types.HSBType;
 import org.openhab.core.library.types.OnOffType;
@@ -45,7 +46,8 @@ import com.google.gson.GsonBuilder;
  */
 @NonNullByDefault
 public class StateTypeAdapterTest {
-    private Gson mapper = new GsonBuilder().registerTypeHierarchyAdapter(State.class, new StateTypeAdapter()).create();
+    private Gson mapper = new GsonBuilder().setDateFormat(DateTimeType.DATE_PATTERN_JSON_COMPAT)
+            .registerTypeHierarchyAdapter(State.class, new StateTypeAdapter()).create();
 
     private static final List<DecimalType> DECIMAL_TYPE_VALUES = List.of(DecimalType.ZERO, new DecimalType(1.123),
             new DecimalType(10000000));