dubbo 接口调用部分字段丢失问题

      今天偶然发现,通过dubbo接口调用发现某个字段是空的。第一反应是不是没有设置值,查看服务端代码,是设置值了的。这就奇了怪了。怀疑人生啊,我反复去看返回实体类,发现那个类继承了另外一个类。而且那个为空的字段,在父类也定义了。猜想是不是这个原因导致的,移除子类的该字段,正常了。我擦 ,这是什么鬼,只能去查资料了。

   dubbo默认使用的序列化方式是hession

-- 序列化
public static byte[] serialize(Object obj) throws IOException {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    HessianOutput ho = new HessianOutput(os);
    ho.writeObject(obj);
    return os.toByteArray();
}

-- 反序列化
public static Object deserialize(byte[] by) throws IOException {
    ByteArrayInputStream is = new ByteArrayInputStream(by);
    HessianInput hi = new HessianInput(is);
    return hi.readObject();
}

查看源码即可得知,hession 序列化会把子类父类所有属性序列化,如果存某个字段子类父类都存在,那么会序列化后将有2个值

一个有值,一个为空。那么在反序列化时会对该字段做两次赋值,操作过后字段的值就被设置成空了。

言归正传怎么解决呢?

1 最好不重复定义字段咯,删除即可

2 有时候就是有人不按常理出牌,那么就修改hession的源码

3 更换其他序列化方式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值