一个案例
POJO没有set方法, 造成反序列化时出现NPE问题。实际场景:POJO是第三方提供的,final
public class XJSONTest { public static void main(String[] args) {
String inStr = "{\"isSuccess\":true}"; // Google Gson
Gson gson = new Gson();
Result result = gson.fromJson(inStr, Result.class);
System.out.println(result.getIsSuccess()); //alibaba FastJson
Result result2 = JSON.parseObject(inStr, Result.class);
System.out.println(result2.getIsSuccess());
}
} class Result {
Boolean isSuccess; public Boolean getIsSuccess() {
return isSuccess;
}
}
运行结果:Gson的输出true, FastJson输出null, 后面的业务逻辑使用getIsSuccess时很容易出现NPE
FastJson坑真多, 上次遇到一个byte[]数组自动base64编码,还有各种安全问题, 。。。
原因分析:
Gson序列化时直接操作field, FastJson操作的是get set方法
RPC框架中的序列化: Hession也是操作field