openFeign遠端呼叫時使用Mybatis-plus的IPage介面進行返回分頁資料失敗的記錄
阿新 • • 發佈:2020-10-26
openFeign遠端呼叫時使用Mybatis-plus的IPage介面進行返回分頁資料失敗的記錄
1. 問題描述
前置條件:
- 使用openFeign+mybatis-plus
- 使用json格式進行資料的傳輸,即限制web傳輸的資料格式為 content-type = application/json
問題:
1. 微服務A 通過 openFeign 呼叫微服務B 的介面時返回資料為 null
2. 直接呼叫微服務B的介面,返回資料正常
2. 問題解決過程
1. 首先在微服務B中檢視該介面返回的資料,是否正常
結果:
1. 有資料進行返回
2. 對資料進行列印時顯示為物件地址,而非期望的json字串
2. 試圖修改返回的Object,改為Object.toString()
結果:
打印出的資料仍為物件地址
3. 試圖修改返回的Object,將其進行Json序列化,即改為JSONObject.toJSON(data),進行返回
結果:
列印的資料為期望的的json字串,但如此改動十分不友好,不利於後續的開發,而且需要修改方法的返回型別,故放棄
4. 進一步分析發現,mybatis-plus中的IPage介面雖然實現了Serializable介面,但未實現Json序列化
解決方案:
- 自定義一個Page類,繼承IPage介面的實現類Page,實現Json序列化即可
實現:
public class SerializableForFastJsonPage<T> extends Page<T> { @Override public String toString() { return JSONObject.toJSONString(this);// 實現json序列化 } }
結果:
使用SerializableForFastJsonPage類替換IPage類,即可實現json序列化資料進行返回
5. 注意:在接收方進行反序列化的時候,需要指定具體的接收的資料型別,不可使用泛型,使用泛型會導致接收不到資料