fastJson Gson对比及java序列化问题

本文探讨了当POJO类缺乏setter方法时,使用Gson与FastJson进行反序列化的不同表现。Gson能正确解析并返回布尔值,而FastJson则返回null,这可能导致后续业务逻辑中出现空指针异常。

 

一个案例

POJO没有set方法, 造成反序列化时出现NPE问题。实际场景:POJO是第三方提供的,final

 1 public class XJSONTest {
 2 
 3     public static void main(String[] args) {
 4         String inStr = "{\"isSuccess\":true}";
 5 
 6         // Google Gson
 7         Gson gson = new Gson();
 8         Result result = gson.fromJson(inStr, Result.class);
 9         System.out.println(result.getIsSuccess());
10 
11         //alibaba FastJson
12         Result result2 = JSON.parseObject(inStr, Result.class);
13         System.out.println(result2.getIsSuccess());
14     }
15 }
16 
17 class Result {
18     Boolean isSuccess;
19 
20     public Boolean getIsSuccess() {
21         return isSuccess;
22     }
23 }

运行结果:Gson的输出true, FastJson输出null,   后面的业务逻辑使用getIsSuccess时很容易出现NPE

FastJson坑真多, 上次遇到一个byte[]数组自动base64编码,还有各种安全问题, 。。。

 

原因分析:

Gson序列化时直接操作field, FastJson操作的是get set方法

RPC框架中的序列化: Hession也是操作field

 

转载于:https://www.cnblogs.com/yszzu/p/9412353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值