标签:img es2017 有趣 分享 boolean nbsp arraylist idt 阿里
由于没有写博客的习惯,一直坚持不下来。
但是这次在重构中遇到这个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,但是返回的却是空数组。
标签:img es2017 有趣 分享 boolean nbsp arraylist idt 阿里
原文地址:http://www.cnblogs.com/fastLearn/p/7595860.html