fastjson相关问题

前端之家收集整理的这篇文章主要介绍了fastjson相关问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

0 概述

本文主要讲述在实际工作中遇到的fastjson(版本1.2.34)相关问题。

1 常见问题

1.1缺少默认的构造函数

使用JSON形式的序列化技术时,所有通信传递的对象必须设置无参的默认构造函数

  1. public class User {
  2.  
  3. private String name;
  4. private int age;
  5.  
  6. public User(String name,int age) {
  7. this.name = name;
  8. this.age = age;
  9. }
  10.  
  11. public String getName() {
  12. return name;
  13. }
  14.  
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18.  
  19. public int getAge() {
  20. return age;
  21. }
  22.  
  23. public void setAge(int age) {
  24. this.age = age;
  25. }
  26.  
  27. public class JsonTest {
  28. public static void main(String[] args) {
  29.  
  30. System.out.println(JSON.parSEObject("{\"name\":\"test\",\"age\":12}\n",User.class));
  31. }
  32. }

运行程序抛出如下异常,解决办法,添加默认构造函数即可。

  1. Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found
  2. ...

1.2 序列化或反序列化结果不对

fastjson默认根据get和set方法生成json体中的属性键值对,如果实体属性中没有对应的set或get方法将得不到结果。

  1. public class User {
  2.  
  3. private String name;
  4. private int age;
  5.  
  6. public User(String name,int age) {
  7. this.name = name;
  8. this.age = age;
  9. }
  10.  
  11. public User() {
  12. }
  13.  
  14. public String getName() {
  15. return name;
  16. }
  17.  
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21.  
  22. @Override
  23. public String toString() {
  24. return "User{" +
  25. "name='" + name + '\'' +
  26. ",age=" + age +
  27. '}';
  28. }
  29. }
  30.  
  31. public class JsonTest {
  32. public static void main(String[] args) {
  33. System.out.println(JSON.toJSON(new User("test",12)));
  34. System.out.println(JSON.parSEObject("{\"name\":\"test\",User.class));
  35. }
  36. }

由于age属性没有get方法,序列化时候就没有age信息,反序列化也类似 输出: {“name”:”test”} User{name=’test’,age=0}

猜你在找的Json相关文章