From c04070e73d316b527cfe61ad2dd05b713fdf95f4 Mon Sep 17 00:00:00 2001 From: yanxutao89 <910135896@qq.com> Date: Fri, 31 May 2024 19:53:46 +0800 Subject: [PATCH] fix support read java.sql.Date, for issue #2623 --- .../com/alibaba/fastjson2/JSONReader.java | 8 +++++ .../fastjson2/issues_2600/Issue2623.java | 31 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 core/src/test/java/com/alibaba/fastjson2/issues_2600/Issue2623.java diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONReader.java b/core/src/main/java/com/alibaba/fastjson2/JSONReader.java index bd24ba545b..bc294c8512 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONReader.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONReader.java @@ -1104,6 +1104,14 @@ public LocalDateTime readLocalDateTime() { return zdt.toLocalDateTime(); } + if (isTypeRedirect() && nextIfMatchIdent('"', 'v', 'a', 'l', '"')) { + nextIfMatch(':'); + LocalDateTime dateTime = readLocalDateTime(); + nextIfObjectEnd(); + setTypeRedirect(false); + return dateTime; + } + if (context.dateFormat == null || context.formatyyyyMMddhhmmss19 || context.formatyyyyMMddhhmmssT19 diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_2600/Issue2623.java b/core/src/test/java/com/alibaba/fastjson2/issues_2600/Issue2623.java new file mode 100644 index 0000000000..fe22da7495 --- /dev/null +++ b/core/src/test/java/com/alibaba/fastjson2/issues_2600/Issue2623.java @@ -0,0 +1,31 @@ +package com.alibaba.fastjson2.issues_2600; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.TypeReference; +import org.junit.jupiter.api.Test; + +import java.sql.Date; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class Issue2623 { + @Test + public void test() { + Map map = new HashMap<>(); + map.put("a", 1L); + map.put("b", 2); + map.put("c", 3F); + map.put("d", new Date(System.currentTimeMillis())); + map.put("e", new java.util.Date()); + + String s = JSON.toJSONString(map, JSONWriter.Feature.WriteClassName); + Map map2 = JSON.parseObject(s, new TypeReference>() { + }, JSONReader.Feature.SupportAutoType); + assertEquals(map.get("d").toString(), map2.get("d").toString()); + assertEquals(map.get("e").toString(), map2.get("e").toString()); + } +}