Fastjson对范型处理的bug

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fastjson对范型处理的bug相关的知识,希望对你有一定的参考价值。

由于没有写博客的习惯,一直坚持不下来。

但是这次在重构中遇到这个bug忍不住要写下来。太有趣啦。

问题是这样的:

  为了方便app对返回的数据处理,空数组返回[],空对象返回null,

个人喜欢阿里,所以引入了FastJson。所有的返回值都封装成下面的Result对象返回。最后发现大部分时候data为空时返回的是null,偶尔却返回的[],对安卓端产生了影响。

 

@Getter
public class Result<T> implements Serializable {

private static final long serialVersionUID = -5876274825677709598L;

private int code;

private T data;

private String desc;
}

技术分享

 

    看了看源码,其中
com.alibaba.fastjson.serializer.FieldSerializer.writeValue(
JSONSerializer serializer, Object propertyValue)
这个方法会把第一次的解析的Result中data属性以ArrayList类型存在中runtimeInfo中,
为了提高效率第二个booleanResult在解析时不会再重新加载data的类型,默认为第一次加载的数组类型,
最后期望返回null,但是返回的却是空数组。

 

 














以上是关于Fastjson对范型处理的bug的主要内容,如果未能解决你的问题,请参考以下文章

JSON 之FastJson解析

JSON 之FastJson解析

JSON 之FastJson解析

Java的Json解析包FastJson使用

解决FastJson 1.2.39的bug

fastjson对Date的处理