From 43fed87236dec7b837569c07ed1e5fc00c90ede4 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 16 Jan 2017 21:44:23 +0800 Subject: [PATCH] bug fixed for WildcardType extends Generic Type. issue #998 --- .../parser/ListTypeFieldDeserializer.java | 15 ++++++---- .../com/alibaba/json/bvt/bug/Issue998.java | 28 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/alibaba/json/bvt/bug/Issue998.java diff --git a/src/main/java/com/alibaba/fastjson/parser/ListTypeFieldDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/ListTypeFieldDeserializer.java index fbb2d59bf..0201da02b 100755 --- a/src/main/java/com/alibaba/fastjson/parser/ListTypeFieldDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/ListTypeFieldDeserializer.java @@ -1,9 +1,6 @@ package com.alibaba.fastjson.parser; -import java.lang.reflect.Array; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; +import java.lang.reflect.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -28,7 +25,15 @@ class ListTypeFieldDeserializer extends FieldDeserializer { Type fieldType = fieldInfo.fieldType; Class fieldClass= fieldInfo.fieldClass; if (fieldType instanceof ParameterizedType) { - this.itemType = ((ParameterizedType) fieldType).getActualTypeArguments()[0]; + Type argType = ((ParameterizedType) fieldInfo.fieldType).getActualTypeArguments()[0]; + if (argType instanceof WildcardType) { + WildcardType wildcardType = (WildcardType) argType; + Type[] upperBounds = wildcardType.getUpperBounds(); + if (upperBounds.length == 1) { + argType = upperBounds[0]; + } + } + this.itemType = argType; array = false; } else if (fieldClass.isArray()) { this.itemType = fieldClass.getComponentType(); diff --git a/src/test/java/com/alibaba/json/bvt/bug/Issue998.java b/src/test/java/com/alibaba/json/bvt/bug/Issue998.java new file mode 100644 index 000000000..e744fd0c1 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/bug/Issue998.java @@ -0,0 +1,28 @@ +package com.alibaba.json.bvt.bug; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import junit.framework.TestCase; + +import java.util.List; + +/** + * Created by wenshao on 16/01/2017. + */ +public class Issue998 extends TestCase { + public void test_for_issue() throws Exception { + Model model = JSON.parseObject("{\"items\":[{\"id\":123}]}", Model.class); + assertNotNull(model); + assertNotNull(model.items); + assertEquals(1, model.items.size()); + assertEquals(123, model.items.get(0).id); + } + + public static class Model { + public List items; + } + + public static class Item { + public int id; + } +}