【Feign】??使用 openFeign 時傳遞 MultipartFile 類型的參數參考

💥💥????歡迎閱讀本文章????💥💥

🏆本篇文章閱讀大約耗時三分鐘

??motto:不積跬步、無以千里

📋📋📋本文目錄如下:🎁🎁🎁

目錄

前言

模擬

解決方案

章末

前言

? ? ? ? 小伙伴們大家好,這篇文章主要描述下最近在開發時遇到的一個服務之間通過 openFeign 調用時遇到的參數傳遞問題,如題目所述,該參數類型正是 MultipartFile。

? ? ? ? 在網上有很多解決方案,比如另外引入 feign + spring 的聯合依賴(叫什么記不住了),或者轉換成字節數組傳遞,接收方再轉換為 MultipartFile 對象(要引入MockMultifile 依賴,應該是這個),然后還有本文使用的這種方案(不用引入依賴,改動也不多)

? ? ? ? 先來模擬下大致的使用場景,也可以直接跳過模擬看解決方案(環境不同,也可能解決不了各位的問題,請諒解)

模擬

? ? ? ? 本地模擬就以兩個簡單服務之間的調用實現,對應一個客戶端,一個服務端,場景就是從客戶端調用服務端的接口,中間需要傳遞 MultipartFile 類型的參數,要怎么成功把參數傳遞到服務端

? ? ? ? 1、客戶端會暴露一個接口,參數為 MultipartFile 類型的 file 參數,然后通過 feign 調用服務端的接口,feign 配置也很簡單,指定了服務端地址和定義了一個方法

? ? ? ? 2、服務端

? ? ? ? 提供的方法很簡單,打印 file 的大小,然后返回給客戶端該參數的 大小+原始名稱

? ? ? ? 3、測試

? ? ? ? 目前這種情況,在調用客戶端暴露的接口,參數可以成功傳到客戶端,但是從客戶端傳到服務端的時候會遇到異常,服務端提示異常如下:

Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Current request is not a multipart request] with root cause

解決方案

? ? ? ? 指定自定義編碼器,并且標注請求頭,使用 @RequestPart 注解標注參數。具體實現案例如下:

? ? ? ? 1、編碼配置類

import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author HuangBenben */
@Configuration
public class FeignConfig {@Beanpublic Encoder devEncoder() {return new SpringFormEncoder();  // 使用 SpringFormEncoder 實現 Encoder 接口}
}

? ? ? ? 2、feign 接口指定編碼和請求頭以及參數注解

????????@FeignClient 注解中指定 configuration 的值為 自己創建的編碼配置類

? ? ? ? 具體的方法定義加上對應請求頭

? ? ? ? 使用 @RequestPart 注解

? ? ? ? 3.服務端調整

? ? ? ? 服務端在接收參數時也使用 @RequestPart 注解

? ? ? ? ?4、測試

? ? ? ? 可以正常傳遞參數并且接收到了服務端的返回值

?

章末

? ? ? ? 這里簡易將使用到自定義編碼配置類的 feign 接口統一放到一個調用類中,不要跟正常調用的方法放一起,這里指定了編碼配置可能會影響別的方法

? ? ? ? 文章到這里就結束了~

往期推薦 > > >?

?【接口負載】??整合 Resilience4j 指定接口負載,避免過載

?【SpringBoot】??整合 Redis 實現百萬級數據實時排序

?【SpringBoot】??本地集成支付寶支付功能

????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899685.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899685.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899685.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zk基礎—1.一致性原理和算法二

大綱 1.分布式系統特點 2.分布式系統的理論 3.兩階段提交Two-Phase Commit(2PC) 4.三階段提交Three-Phase Commit(3PC) 5.Paxos島的故事來對應ZooKeeper 6.Paxos算法推導過程 7.Paxos協議的核心思想 8.ZAB算法簡述 6.Paxos算法推導過程 (1)Paxos的概念 (2)問題描述 …

216. 組合總和 III 回溯

目錄 問題描述 解決思路 關鍵點 代碼實現 代碼解析 1. 初始化結果和路徑 2. 深度優先搜索(DFS) 3. 遍歷候選數字 4. 遞歸與回溯 示例分析 復雜度與優化 回溯算法三部曲 1. 路徑選擇:記錄當前路徑 2. 遞歸探索:進入下…

從AI大模型到MCP中臺:構建下一代智能服務的核心架構

從AI大模型到MCP中臺:構建下一代智能服務的核心架構 引言:AI大模型帶來的服務重構革命 在ChatGPT掀起全球AI熱潮的今天,大模型展現出的驚人能力正在重塑整個軟件服務架構。但鮮為人知的是,真正決定AI服務成敗的不僅是模型本身&a…

美團小程序 mtgsig1.2 拼好飯案例 分析 mtgsig

聲明 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 逆向分析 美團網頁、小程序、app全是指…

【大模型基礎_毛玉仁】5.5 模型編輯應用

目錄 5.5 模型編輯應用5.5.1 精準模型更新5.5.2 保護被遺忘權5.5.3 提升模型安全 5.5 模型編輯應用 大語言模型面臨更新成本高、隱私保護難、安全風險大等問題。模型編輯技術: 通過細粒度修改預訓練模型,避免從頭訓練,降低更新成本&#xff…

揭秘:父子組件之間的傳遞

基礎知識 組件與組件之間有三大方面的知識點: 子組件通過props defineProps({})接收父組件傳遞到參數和方法;子組件可以通過定義 emit 事件,向父組件發送事件;父組件調用子組件通過defineExpose 導出的方法…

微前端實現方案對比Qiankun VS npm組件

架構層面: 1、Qiankun是典型的微前端架構,側重構建多個獨立前端應用協同工作的架構,主應用負責自用用的加載、卸載和通信;子應用不限制,可以是VUE、React等; 2、Qiankun松耦合,各個自應用獨立…

可編輯160頁PPT | 營銷流程和管理數字化轉型規劃

薦言分享:隨著技術的發展和消費者行為的變化,傳統營銷方式已難以滿足現代企業的需求。企業需要借助數字化手段,對營銷流程進行全面梳理和優化,提升營銷活動的精準度和效率。同時,通過數字化營銷管理,企業可…

Ecovadis認證需要準備哪些材料?

Ecovadis認證,作為全球領先的企業社會責任(CSR)評估平臺,其準備材料的過程不僅需要詳盡無遺,更要體現出企業在環境、社會、勞工和倫理四大方面的卓越實踐與持續改進的決心。 首先,環境管理方面&#xff0c…

程序化廣告行業(45/89):RTB競價后續流程、結算規則及相關要點解讀

程序化廣告行業(45/89):RTB競價后續流程、結算規則及相關要點解讀 大家好!一直以來,我都希望能和大家一起在程序化廣告這個領域不斷探索、共同成長,這也是我寫這系列博客的初衷。之前我們了解了程序化廣告…

權重參數矩陣

目錄 1. 權重參數矩陣的定義與作用 2. 權重矩陣的初始化與訓練 3. 權重矩陣的解讀與分析 (1) 可視化權重分布 (2) 統計指標分析 4. 權重矩陣的常見問題與優化 (1) 過擬合與欠擬合 (2) 梯度問題 (3) 權重對稱性問題 5. 實際應用示例 案例1:全連接網絡中的…

文法 2025/3/3

文法的定義 一個文法G是一個四元組:G(,,S,P) :一個非空有限的終極符號集合。它的每個元素稱為終極符號或終極符,一般用小寫字母表示。終極符號是一個語言不可再分的基本符號。 :一個非空有限的非終極符號集合。它的每個元素稱為…

字符串復習

344:反轉字符串 編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 示例 1: 輸入:s ["…

【數據結構】算法效率的雙刃劍:時間復雜度與空間復雜度

前言 在算法的世界里,效率是衡量算法優劣的關鍵標準。今天,就讓我們深入探討算法效率的兩個核心維度:時間復雜度和空間復雜度,幫助你在算法設計的道路上更進一步。 一、算法效率:衡量算法好壞的關鍵 算法的效率主要…

Java基礎-26-多態-認識多態

在Java編程中,多態(Polymorphism) 是面向對象編程的核心概念之一。通過多態,我們可以編寫更加靈活、可擴展的代碼。本文將詳細介紹什么是多態、如何實現多態,并通過具體的例子來幫助你更好地理解這一重要概念。 一、什…

使用自定義的RTTI屬性對對象進行流操作

由于歷史原因,在借鑒某些特定出名的游戲引擎中,不知道當時的作者的意圖和編寫方式 特此做這篇文章。(本文出自游戲編程精粹4 中 使用自定義的RTTI屬性對對象進行流操作 文章) 載入和 保存 關卡,并不是一件容易辦到的事…

周總結aa

上周學習了Java中有關字符串的內容,與其有關的類和方法 學習了static表示靜態的相關方法和類的使用。 學習了繼承(extends) 多態(有繼承關系,有父類引用指向子類對象) 有關包的知識,final關鍵字的使用,及有…

密碼學基礎——密碼學相關概念

目錄 1.1 密碼系統(Cryptosystem) 1.2 密碼編碼學 1.3 密碼分析學 1.4 基于算法保密 1.5 基于密鑰保密 1.6密碼系統的設計要求 1.7 單鑰體制 1.8 雙鑰體制 密鑰管理 1.1 密碼系統(Cryptosystem) 也稱為密碼體制&#xff0…

初始JavaEE篇 —— Mybatis-plus 操作數據庫

找往期文章包括但不限于本期文章中不懂的知識點: 個人主頁:我要學編程程(?_?)-CSDN博客 所屬專欄:JavaEE 目錄 前言 Mybatis-plus 快速上手 Mybatis-plus 復雜操作 常用注解 TableName TableField TableId 打印日志 條件構造器 …

PyQt6實例_批量下載pdf工具_主線程啟用線程池

目錄 前置: 代碼: 視頻: 前置: 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭,放在 【PyQt6實例】 專欄 2 本系列涉及到的PyQt6知識點: 線程池:QThreadPool,QRunnable; 信號與…