1. 程式人生 > 其它 >Redis遇到的問題Could not resolve type id ** into a subtype解決辦法

Redis遇到的問題Could not resolve type id ** into a subtype解決辦法

技術標籤:java# redisredisjsonjava

提示:以下是本篇文章正文內容,下面案例可供參考

場景描述:

現有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)