编辑
2024-06-10
工作日誌
0
请注意,本文编写于 373 天前,最后修改于 373 天前,其中某些信息可能已经过时。

目录

FastJson介紹
FastJson使用
FastJson常用API
FastJson漏洞問題
FastJson踩坑

FastJson介紹

在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。

FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。

特点如下:

(1)能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。

(2)顾名思义,fastjson操作JSON的速度是非常快的。

(3)无其他包的依赖。

(4)使用比较方便。

FastJson使用

在Maven项目中使用fastjson库,需要提前在Maven的配置文件中添加此fastjson包的依赖,如pom.xml文件。

添加下面的依赖:

xml
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <!--(起码1.2.48以上)因为这个版本一下存在漏洞--> <version>版本根据自己需要</version> </dependency>

FastJson常用API

java
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray public static final JSONObject parseObject(String text)// 把JSON文本parse成JSONObject public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。

FastJson漏洞問題

可参考文章:https://www.cnblogs.com/chaos-li/p/11139992.html

真实项目中使用建设使用版本大于:1.2.45

FastJson踩坑

序列化的类必须有一个无参构造方法

被序列化的类需要有一个无参的构造方法。否则会报错 Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found. class User

如果你没有重写构造方法,那么每个类都自带一个无参的构造方法,但是如果你重写了一个有参的构造方法,那么默认的无参构造方法会被覆盖,这时候就需要你手动写一个无参的构造方法进去。所以我建议保险起见,需要被json序列化的类最好都手动写一个无参的构造方法进去。

在低版本中转换的时候会直接抛以上异常信息(测试版本:fastjson-1.1.12)。但是高版本(fastjson-1.2.58)就不会报错。 建议在定义javabean时都把无参和有参定义。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:澳门🇲🇴上班的IT人

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!