fastjson踩坑,遇到无法反序列化奇葩问题

今天利用fastjson TypeReference 反序列化一个对象,发现怎么都没法反序列化成功,具体见代码

需要序列化的对象

public class Result<T> {
     
    private static final int defaultCode = Integer.valueOf(0);
    private int code;
    private T data;
    private String message;

    private Result() {
     
    }

    private Result(int code) {
     
        this.code = code;
    }

    private Result(T data) {
     
        this(defaultCode);
        this.data = data;
    }

    private Result(int code, String message) {
     
        this.code = code;
        this.message = message;
    }

    public static Result success() {
     
        return new Result(defaultCode);
    }

    public static <T> Result success(T data) {
     
        return new Result(data);
    }

    public static Result failure(int code, String message) {
     
        return new Result(code, message);
    }

    public int getCode() {
     
        return this.code;
    }

    public T getData() {
     
        return this.data;
    }

    public String getMessage() {
      return this.message; }
}

反序列化代码

Result<User> result = JSON.parseObject(json, new TypeReference<Result<User>>(){
     });

json串

{
     
  "code": 0,
  "data": {
     
    "userId": 1,
    "userAccount": "test",
    "userPass": "123456",
    "userPhoto": "",
    "userPhone": "13466668888",
    "userState": 1
  }
}

结果发现,不管怎么反序列话,返回的Result对象,code=0,其他都是null,fastjson也不报错,开始以为是泛型问题,各种查资料,找问题,折腾半天,最后发现,竟然是Result对象没有写Set方法(好吧,被网上代码坑死了!!!)

在Result中加入以下set方法,运行一下,完美解决

public void setCode(int code) {
     
        this.code = code;
    }

    public void setData(T data) {
     
        this.data = data;
    }

    public void setMessage(String message) {
     
         this.message = message;
    }

对象中有getXXX方法时,从model到json时,会XXX属性,有setXXX方法时,则从json到model会增加xxx属性

如果发现json序列化少了某个属性,请检查get方法,如果json反序列化少了某个属性,请检查set方法

所有的需要序列化的属性,都需要加上get或者set,如果是内部类,还要再加上public static修饰

你可能感兴趣的:(java,fastjson,发序列化)