导入fastjson各个版本

项目地址在这里:https://github.com/alibaba/fastjson

这里两种导入方式,一种是下载jar包,然后导入(不详细说啦,应该都清楚)只是这个jar包需要自行找,思路:GitHub中大佬们做复现漏洞的时候会将整个项目发布上去,可以去项目中找找。

另一种是创建maven项目,从新建的maven项目的配置文件中导入。2022版idea创建maven项目,这里因为我也刚开始学,所以自己记录下这个创建项目的过程

🍔fastjson基本使用 - 图1

如果是第一次创建,等待配置大概需要6-8分钟,看网速哈。

然后说主要的导入方式,在pom.xml(项目配置文件)

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.24</version>
  5. </dependency>

fastjson使用方式

新建一个User类

  1. package com.testjson.demo.json;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.serializer.SerializerFeature;
  4. public class User {
  5. private String username;
  6. private int age;
  7. private String password;
  8. public User(){
  9. System.out.println("这是构造函数");
  10. }
  11. public String getUsername(){
  12. return username;
  13. }
  14. public void setUsername(String username) {
  15. this.username = username;
  16. }
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. public String getPassword() {
  24. return password;
  25. }
  26. public void setPassword(String password) {
  27. this.password = password;
  28. }
  29. public static void main(String[] args) {
  30. User user = new User();
  31. user.setUsername("777");
  32. user.setAge(200);
  33. user.setPassword("777pass");
  34. System.out.println(JSON.toJSONString(user, SerializerFeature.WriteClassName));
  35. }
  36. }

🍔fastjson基本使用 - 图2

可以看出来fastjson的SerializerFeature.WriteClassNametoJSONString设置的一个属性值

然后就是fastjson的序列化结果带了个标志,{"@type":"xxxx"}

反序列化

  1. package com.testjson.demo.json;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.parser.Feature;
  4. import com.alibaba.fastjson.serializer.SerializerFeature;
  5. import java.io.FilterOutputStream;
  6. public class User {
  7. private String username;
  8. private int age;
  9. private String password;
  10. public User(){
  11. System.out.println("这是构造函数");
  12. }
  13. public void setUsername(String username) {
  14. this.username = username;
  15. }
  16. public int getAge() {
  17. return age;
  18. }
  19. public String getPassword() {
  20. return password;
  21. }
  22. public static void main(String[] args) {
  23. User aUser = JSON.parseObject("{\"@type\":\"com.testjson.demo.json.User\",\"age\":200,\"password\":\"777pass\",\"username\":\"777\"}", User.class, Feature.SupportNonPublicField);
  24. System.out.println(aUser);
  25. System.out.println(aUser.getUsername() + " " + aUser.getAge() + " " + aUser.getPassword());
  26. }
  27. }

🍔fastjson基本使用 - 图3

反序列化方法用到了parseObject

JSON.toJSONString(User)的功能为将类转换为json字符串,并且在转换的同时调用了get方法这是fastjson反序列中一个重要的点