fastjson对象的序列化与反序列化踩得坑
现象
最近使⽤RabbitMq发送消息时,遇到了提供者发送的消息(使⽤fastjson序列化数据对象)在消费者端转成(使⽤fastjson反序列化)数据对象后,属性缺失了
fastjson常用方法发送的消息对象:
/**
* 课本
**/
@Data
public class Book implements Serializable {
private static final long serialVersionUID = -4861445364356803601L;
private Integer id;
private String name;
private Integer type;
private String remark;
public Book(Integer id, String name) {
this.id = id;
this.name = name;
}
}
产⽣的现象如下图所⽰:
序列化对象后:
反序列化后:
上述现象可以看出,反序列化对象后,type 和 remark 属性值缺失了
原因
这⾥之所以出现这个问题,根本原因就是使⽤fastjson序列化与反序列化对象造成的,下⾯通过⽰例结合源码来分析⼀下成因:
1、⽆默认构造⽅法时,只有部分参数构造⽅法时(即只有 id,name 两个参数构成的构造⽅法)
对象:
运⾏断点调试:
运⾏结果:
得出结论:⽆默认构造⽅法时,构造bean属性从构造⽅法的参数中获取的(即只有id、name),因此反序列化时⽣成的对象会缺失 type 和 remark 的值
2、⽆默认构造⽅法时,有不同参数个数的多个构造⽅法
对象:
运⾏调试步骤如下图:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论