dubbo序列化的问题,丢失属性

本文探讨了在使用Dubbo框架进行微服务开发时遇到的序列化丢失属性问题,并提供了详细的验证步骤。对于正在使用Dubbo或对微服务感兴趣的开发者来说,这是一份宝贵的参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### Dubbo 序列化源码解析 Dubbo序列化机制位于 `org.apache.dubbo.common.serialize` 包下。主要类包括: - **Serialization**: 接口定义了序列化和反序列化的标准操作。 - **ObjectOutput/ObjectInput**: 定义对象写入和读取的具体实现。 对于 FastJSON 和 Hessian2 这两种不同的序列化方式,对应的实现类分别为: #### FastJson 实现 FastJSON 是默认的序列化器,在 3.2 版本中被设置为默认选项[^1]。其核心逻辑由 `com.alibaba.fastjson.JSON` 类处理。 ```java public class FastjsonSerialization extends AbstractSerialization { @Override protected ObjectOutput createOutputStream(OutputStream out) throws IOException { return new FastjsonObjectOutput(out); } @Override protected ObjectInput createInputStream(InputStream in) throws IOException { return new FastjsonObjectInput(in); } } ``` #### Hessian2 实现 Hessian2 提供了一种二进制协议来优化网络传输效率。当配置文件指定了 `prefer-serialization: hessian2` 后,将会启用该序列化模式。 ```java public class Hessian2Serialization extends AbstractSerialization { @Override public byte getContentTypeId() { return CONTENT_TYPE_HESSIAN2; } @Override public String getContentType() { return MIME_APPLICATION_HESSIAN2; } @Override protected ObjectOutput createOutputStream(OutputStream out) throws IOException { return new Hessian2ObjectOutput(out); } @Override protected ObjectInput createInputStream(InputStream is) throws IOException { return new Hessian2ObjectInput(is); } } ``` 在遇到未注册异常的情况下,切换到 Hessian2 可以有效解决问题,因为 Hessian2 对于自定义类型的兼容性更好。 为了确保安全性并允许特定类进行反序列化,可以在配置文件中指定白名单路径 `security/serialize.allowlist` 或者调整安全策略模式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值