業務系統中由於API層與業務實現層使用的是RPC框架調用,該RPC爲公司內部自己研發。由於發佈時候服務端的部署同學忘記發佈到Maven服務器,導致客戶端依賴的是舊版的依賴,新版舊版對比信息如下:
當客戶端調用時候傳入枚舉參數爲:BUSINESS_AUDIENCE_RFM時候,服務端反序列化出來的是BUSINESS_ACTIVITY_ASSET,當時很不理解產生原因,直接本地Debug,跟蹤源碼到序列時候發現,對於枚舉值的序列化實際上序列化的是枚舉值的ordinal字段,如果你對枚舉值的ordinal字段不瞭解請看JDK文檔。因此就很容易理解了,客戶端傳遞參數到服務端是一個數字,服務端根據該數字反序列化枚舉值就會是錯誤的值。(ordinal可以理解爲是枚舉類中字段的順序標識)