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. 注意:在接收方進行反序列化的時候,需要指定具體的接收的數據類型,不可使用泛型,使用泛型會導致接收不到數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM