1. 程式人生 > >Fastjson對範型處理的bug

Fastjson對範型處理的bug

getter per onu fastjson 這樣的 width 部分 strong 由於

由於沒有寫博客的習慣,一直堅持不下來。

但是這次在重構中遇到這個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