From bd2531617cd614c71cc768d7fea002813224abb7 Mon Sep 17 00:00:00 2001 From: hnyyghk Date: Wed, 30 Jun 2021 19:01:31 +0800 Subject: [PATCH] Fix generic field deserialize, issue #3810 --- .../DefaultFieldDeserializer.java | 2 +- .../json/bvt/issue_3800/Issue3810.java | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/json/bvt/issue_3800/Issue3810.java diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/DefaultFieldDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/DefaultFieldDeserializer.java index 3edc8de8b9..fa578a767a 100644 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/DefaultFieldDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/DefaultFieldDeserializer.java @@ -64,7 +64,7 @@ public void parseField(DefaultJSONParser parser, Object object, Type objectType, } if (fieldType != objectType) { fieldType = FieldInfo.getFieldType(this.clazz, objectType, fieldType); - if (fieldValueDeserilizer == null) { + if (fieldValueDeserilizer instanceof JavaObjectDeserializer) { fieldValueDeserilizer = parser.getConfig().getDeserializer(fieldType); } } diff --git a/src/test/java/com/alibaba/json/bvt/issue_3800/Issue3810.java b/src/test/java/com/alibaba/json/bvt/issue_3800/Issue3810.java new file mode 100644 index 0000000000..1662694338 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/issue_3800/Issue3810.java @@ -0,0 +1,40 @@ +package com.alibaba.json.bvt.issue_3800; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.util.ParameterizedTypeImpl; +import junit.framework.TestCase; +import lombok.Data; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +/** + * https://github.com/alibaba/fastjson/issues/3810 + * + * @author hnyyghk + * @date 2021/06/30 18:40 + */ +public class Issue3810 extends TestCase { + @Data + static class TestA { + T a; + } + + @Data + static class TestB { + String b; + } + + private final static String json = "{\"a\":[{\"b\":\"b\"}]}"; + + public void test_for_issue() throws Exception { + ParameterizedTypeImpl inner = new ParameterizedTypeImpl(new Type[]{TestB.class}, List.class, List.class); + ParameterizedTypeImpl outer = new ParameterizedTypeImpl(new Type[]{inner}, TestA.class, TestA.class); + JSONObject jo = JSONObject.parseObject(json); + TestA> ret = jo.toJavaObject(outer); + + assertEquals(ArrayList.class.getName(), ret.getA().getClass().getName()); + assertEquals(TestB.class.getName(), ret.getA().get(0).getClass().getName()); + } +} \ No newline at end of file