分佈式RPC調用時候Java枚舉類型類型版本不一致導致反序列化結果錯誤

業務系統中由於API層與業務實現層使用的是RPC框架調用,該RPC爲公司內部自己研發。由於發佈時候服務端的部署同學忘記發佈到Maven服務器,導致客戶端依賴的是舊版的依賴,新版舊版對比信息如下:

當客戶端調用時候傳入枚舉參數爲:BUSINESS_AUDIENCE_RFM時候,服務端反序列化出來的是BUSINESS_ACTIVITY_ASSET,當時很不理解產生原因,直接本地Debug,跟蹤源碼到序列時候發現,對於枚舉值的序列化實際上序列化的是枚舉值的ordinal字段,如果你對枚舉值的ordinal字段不瞭解請看JDK文檔。因此就很容易理解了,客戶端傳遞參數到服務端是一個數字,服務端根據該數字反序列化枚舉值就會是錯誤的值。(ordinal可以理解爲是枚舉類中字段的順序標識)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章