业务系统中由于API层与业务实现层使用的是RPC框架调用,该RPC为公司内部自己研发。由于发布时候服务端的部署同学忘记发布到Maven服务器,导致客户端依赖的是旧版的依赖,新版旧版对比信息如下:
当客户端调用时候传入枚举参数为:BUSINESS_AUDIENCE_RFM时候,服务端反序列化出来的是BUSINESS_ACTIVITY_ASSET,当时很不理解产生原因,直接本地Debug,跟踪源码到序列时候发现,对于枚举值的序列化实际上序列化的是枚举值的ordinal字段,如果你对枚举值的ordinal字段不了解请看JDK文档。因此就很容易理解了,客户端传递参数到服务端是一个数字,服务端根据该数字反序列化枚举值就会是错误的值。(ordinal可以理解为是枚举类中字段的顺序标识)