From 1dd43ce877604802ea594c9da345fa13ff78cfe2 Mon Sep 17 00:00:00 2001 From: rowstop Date: Sun, 4 Feb 2024 18:41:29 +0800 Subject: [PATCH] fix null value field read error on non-default-constructor, for issue #2233 --- .../ObjectReaderNoneDefaultConstructor.java | 4 ++- .../fastjson2/issues_2200/Issue2233.java | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java index 43b624ed97..1c0140960e 100644 --- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java +++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java @@ -279,7 +279,9 @@ public T readObject(JSONReader jsonReader, Type fieldType, Object fieldName, lon } continue; } - + if (jsonReader.nextIfNull()) { + continue; + } FieldReader fieldReader = getFieldReader(hashCode); FieldReader paramReader = paramFieldReaderMap.get(hashCode); if (paramReader != null diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_2200/Issue2233.java b/core/src/test/java/com/alibaba/fastjson2/issues_2200/Issue2233.java index 7a788bae3e..0031ad66bf 100644 --- a/core/src/test/java/com/alibaba/fastjson2/issues_2200/Issue2233.java +++ b/core/src/test/java/com/alibaba/fastjson2/issues_2200/Issue2233.java @@ -30,6 +30,33 @@ void test() throws JSONException { JSONAssert.assertEquals(json, JSON.toJSONString(obj, JSONWriter.Feature.WriteNulls), true); } + @Test + void test2() throws JSONException { + String json = "{\"log_entries\": null,\"test\":[]}"; + Obj2 obj = assertDoesNotThrow( + () -> JSON.parseObject(json, Obj2.class) + ); + JSONAssert.assertEquals(json, JSON.toJSONString(obj, JSONWriter.Feature.WriteNulls), true); + } + + @Getter + @Setter + static class Obj2{ + @JsonProperty("log_entries") + private List logEntries; + private List test; + + public Obj2(List logEntries) { + this.logEntries = logEntries; + } + } + + @Getter + @Setter + static class LogEntry{ + private String name; + } + @Getter @Setter static class Obj{