问题描述:
在我们线上使用的RPC序列化是Hessian。参数子类和父类有相同的属性时。用Hessian序列化和反序列化时。会丢失该属性的值
(为什么会有子类和父类相同属性?这是我老板以前写的代码。哈哈哈哈)
@Data
class A implements Serializable{
/**
* 相同属性
*/
private String str;
private Integer integer;
}
@Data
class B extends A {
/**
* 子父类相同属性
*/
private String str;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
B b = new B();
b.setStr("字符串");
b.setInteger(11);
ByteArrayOutputStream os = new ByteArrayOutputStream();
//Hessian的序列化输出
HessianOutput ho = new HessianOutput(os);
ho.writeObject(b);
byte[] byteArray = os.toByteArray();
ByteArrayInputStream is = new ByteArrayInputStream(byteArray);
//Hessian的反序列化读取对象
HessianInput hi = new HessianInput(is);
B bRead = (B) hi.readObject();//前面的ho.writeObject();必须有,不然报错HessianProtocolException: unknown code for readObject at end of file
System.out.println("字符串:" + bRead.getStr());
System.out.println("整数:" + bRead.getInteger());
}
/**
* 输出结果
*/
字符串:null
整数:11
过程中我用Arthas 监听rpc服务访问前 和 访问接受到的时候 的请求参数
的确有个属性的确为null。