fastjson有什么缺点?解读fastjson的坑

Fastjson 是一个Java库,Fastjson可以操作任何Java对象,即使是一些预先存在的没有源码的对象。但是即使有优点,但是fastjson也是有一些坑的,下面来我们就来给大家讲解一下fastjson的坑。

一.fastjson之坑:

1.序列化是会多字段,少字段;

2.有时不能序列化成功;

二.原理分析:

1.bean中有getXXX方法时,从json到model会增加xxx属性,有setXXX方法是,从model到json会增加xxx的赋值;

2.在内部类中使用时,不加static变量会不能转换成功;

3.private或protected变量中,缺少get或者set方法会影响转换,所以而且这些方法中不能有其他的非自动生成的操作,否则这些无关操作也会执行,因为fastjson是通过调用set,get方法来序列化的,而不是根据json串实际的转换,比如:在反序列化时,如果你的get方法中有打log操作,那么会真的给你打一堆log的;

4.这也许说明了fastjson快速的能力是哪里来的,通过调用set,get方法,而不是通过反射,这样可能带来数据的错误,写set,get方法的时候就要完全让自动生成,而不能做其他操作。

三.正确且最优的使用方法:

1.所有需要序列化的字段都用public;

2.所有的public方法开头不允许是get或者set;

3.内部类一定要加上public static修饰;

4.遵循以上3条,fastjson即可保证极快速又不会发生错误;

四.fastjson其他坑:

1.集合中添加同一个对象两次

当我们转Json的时候,会出现 第二个对象是引用,而不是tostring.

fastjson有什么缺点?解读fastjson的坑.png

解决方法:

在参数上添加,`SerializaerFeature.DisableCircularReferenceDetect //关闭循环引用发现`

使用的FastJson的jar

2.角色有List用户 ,用户有List角色

1.png

在这里插入图片描述

出现问题:使用关闭循环引用,会出现内存溢出!

2.png

解决方法:

方案一: 在角色里面的List用户上添加 @JsonField ( serialize = false) 不显示List

方法二: 使用propertyFilter 过滤 ,参数是用你想要显示的名称,没写的会过滤掉

3.png

其实出现一些坑并不可怕,只要我们知道怎么去解决就可以了,我们在分享出坑的同时也给出了解决方法,大家可以参考。最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

java没有指针怎么实现链表?

json文件怎么转换PDF?json文件打不开什么原因?

java如何做可视化界面?实例介绍