Redis遇到的問題Could not resolve type id ** into a subtype解決辦法
阿新 • • 發佈:2021-01-26
提示:以下是本篇文章正文內容,下面案例可供參考
場景描述:
現有A、B兩個服務。
A服務用於授權,授權成功會儲存物件到redis中。
B服務通過token去redis中拿到object物件後轉換成業務物件是出現該種錯誤資訊。
原因分析:
A服務儲存物件到redis中時候會對應有一個全路徑類名限定。在通過token進行取物件值並強制轉換的時候,
如果接收物件的全路徑名稱和redis中儲存的不一樣的話就會轉換失敗報錯。
解決辦法:
`方法一:`
獲取並轉換接收redis中的物件時將接收物件的全路徑與redis中保持一致。
略勢:通常生產環境下,不同的服務對應不同的場景模組,自然對應的包名稱也會根據當前的業務模組進行設定,
所以此種方法並不友好,所以感覺並不建議採用此種方法。
` 方法二:`
獲取redis中object物件,將它裝換成json物件然後再獲取其物件中的關鍵資訊。如下:
String jsonObject = JSONObject.toJSONString(object);
JSONObject jsonObjects = JSONObject.parseObject(jsonObject);
`方法三:`
從源頭上解決,將儲存物件的方式,換成其他方式。
補充fastjson包中的常見操作:
// Java物件轉換成String型別的JSON字串
JSONObject.toJSONString(Java物件)
// String型別的JSON字串轉換成Java物件
JSONObject.toJavaObject( JSON字串,Java物件.class)
// Json字串轉換成JSONObject物件
JSONObject.parseObject(JSON字串)
// JSON字串轉換成Java物件
JSONObject.parseObject(JSON字串,Java物件.class)