fastjson 反序列化不调用setXXX方法的坑

yquaqz18  于 2021-11-27  发布在  Java
关注(0)|答案(3)|浏览(474)

从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

ql3eal8s

ql3eal8s1#

补充:

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

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

o2g1uqev

o2g1uqev2#

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

a0x5cqrl

a0x5cqrl3#

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

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

相关问题