fastjson 大佬我发现一个bug,编写自定义LIST在反序列会失败,原因是createCollection 只能判断8大基础类型

r1zk6ea1  于 2022-10-27  发布在  其他
关注(0)|答案(1)|浏览(166)

自定义list
public interface SourceList extends List {
String getFieldListToString(String fieldName);
}

public class SourceArrayList extends ArrayList implements SourceList,Serializable {
@OverRide
public String getFieldListToString(String fieldName) { return null }
}

public class Source implements Serializable {
private SourceList courseList = new SourceArrayList();

public static void main(String[] args) {
     Source src =new Source ();
     String json=JSON.toJSONString(src);

 Source src2 = JSONObject.parseObject(json, Source.class);
     //这里会报错 create instance error, class courseList

}

因为在源码中TypeUtils# public static Collection createCollection(Type type)方法。
else if(rawClass.isAssignableFrom(ArrayList.class)){ 这行无法匹配到父级的ArrayList
最后跑到
list = (Collection) rawClass.newInstance(); 当我这个是一个接口的时候,就会被示例化失败!!

a1o7rhls

a1o7rhls1#

我已经尝试修复这个bug,并提交了pr,请您查看一下是否满足需求 @wenshao

相关问题