由于没有写博客的习惯,一直坚持不下来。
但是这次在重构中遇到这个bug忍不住要写下来。太有趣啦。
问题是这样的:
为了方便app对返回的数据处理,空数组返回[],空对象返回null,
个人喜欢阿里,所以引入了FastJson。所有的返回值都封装成下面的Result对象返回。最后发现大部分时候data为空时返回的是null,偶尔却返回的[],对安卓端产生了影响。
@Getterpublic 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,但是返回的却是空数组。
时间: 2024-10-09 10:26:04