业务系统中由于API层与业务实现层使用的是RPC框架调用,该RPC为公司内部自己研发。由于发布时候服务端的部署同学忘记发布到Maven服务器,导致客户端依赖的是旧版的依赖,新版旧版对比信息如下:

分布式RPC调用时候Java枚举类型类型版本不一致导致反序列化结果错误

当客户端调用时候传入枚举参数为:BUSINESS_AUDIENCE_RFM时候,服务端反序列化出来的是BUSINESS_ACTIVITY_ASSET,当时很不理解产生原因,直接本地Debug,跟踪源码到序列时候发现,对于枚举值的序列化实际上序列化的是枚举值的ordinal字段,如果你对枚举值的ordinal字段不了解请看JDK文档。因此就很容易理解了,客户端传递参数到服务端是一个数字,服务端根据该数字反序列化枚举值就会是错误的值。(ordinal可以理解为是枚举类中字段的顺序标识)

相关文章:

  • 2021-06-19
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
  • 2021-08-27
猜你喜欢
  • 2021-09-09
  • 2022-12-23
  • 2021-10-20
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
  • 2021-05-14
相关资源
相似解决方案