[alibaba/fastjson]反序列化不调用setXXX方法的坑

2024-10-16 449 views
2

从49升级到62版本,发现反序列化不调用setXXX方法了,灵魂拷问: 为什么?

json:

{"name", "fastjson"}

实体:

public class Person{

    private String name;

    public void setName(String name){
      this.name=name;
      System.out.println("set name");
    }

    public String getName(){
        return name;
    }
}

测试代码: 版本62

  JSONObject json = new JSONObject(1);
  json.put("name", "fastjson");
  Person obj = json.toJavaObject(Person.class);//没有打印 set name

之前49版本: 打印 set name

回答

5

补充:

如果去掉setXXX方法, 反序列化就去不到name

也就是说: setXXX方法只是用来判断是否有这个属性,给属性赋值却是直接 field.setAccessible(true); field.set()

3

应该是缺少构造函数的原因。

3

这跟构造没关系 在1.2.49版本fastsjson还是通过setXXX来反序列化 不知道什么时候就改了

正常作为一个框架,序列化和反序列化都是通过get/set方法,这基本准则都能改,也没看到realease里提到