1. 程式人生 > 實用技巧 >openFeign遠端呼叫時使用Mybatis-plus的IPage介面進行返回分頁資料失敗的記錄

openFeign遠端呼叫時使用Mybatis-plus的IPage介面進行返回分頁資料失敗的記錄

openFeign遠端呼叫時使用Mybatis-plus的IPage介面進行返回分頁資料失敗的記錄

1. 問題描述

前置條件:

  1. 使用openFeign+mybatis-plus
  2. 使用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. 注意:在接收方進行反序列化的時候,需要指定具體的接收的資料型別,不可使用泛型,使用泛型會導致接收不到資料