最近在使用spring cloud封裝的feign,自己在專案中暴露的feign介面中有乙個介面是上傳檔案的,使用了常規的@requsetparam去獲取,然後報錯:
the current request is not a multipart request
然後以為是自己前端使用layui沒有指定上傳型別,修改以後依然無效。然後自己用http直接請求沒有feign的服務介面是可以的,最後定位問題在feign介面上。發現,確實在目前版本的spring cloud feign不支援檔案上傳,需要新增拓展包。
解決思路如下:
服務提供方(接收檔案)
@enablefeignclients
@enablediscoveryclient
@restcontroller
public class uploadcontroller
}public static void main(string args)
}
在服務消費方由於會使用feign客戶端,所以在這裡需引入feign對表單提交的依賴,具體如下:
io.github.openfeign.form
feign-form
3.0.3
io.github.openfeign.form
feign-form-spring
3.0.3
commons-fileupload
commons-fileupload
1.3.3
定義檔案上傳方的應用主類和feignclient,假設服務提供方的服務名為up-loader
在啟動了服務提供方之後,嘗試在服務消費方編寫測試用例來通過上面定義的feign客戶端來傳檔案,比如:
@enablefeignclients
@enablediscoveryclient
public static void main(string args)
}@feignclient(value = "upload-server", configuration = uploadservice.multipartsupportconfig.class)
public inte***ce uploadservice
}}
除了在介面內部定義配置,也可以使用以下這種方式:
@feignclient(name = 「scau-bbs-rest」,configuration = feignmultipartsupportconfig.class)
引入自己自己定義的配置類,配置類的**就是上面feign介面的這部分**:
@configuration
class multipartsupportconfig
}
測試檔案功能:
@slf4j
@runwith(springjunit4classrunner.class)
@springboottest
public class uploadtester catch (exception e)
multipartfile multi = new commonsmultipartfile(fileitem);
log.info(uploadservice.handlefileupload(multi));
}}
解決上面問題按照例子的思路做久沒什麼問題,需要注意接收檔案的註解使用@requestpart。
之後自己研究以下原始碼再補一篇feign原理。
使用Spring Cloud Feign上傳檔案
原文 最近經常有人問spring cloud feign如何上傳檔案。有團隊的新成員,也有其他公司的兄弟。本文簡單做個總結 早期的spring cloud中,feign本身是沒有上傳檔案的能力的 1年之前 要想實現這一點,需要自己去編寫encoder去實現上傳。現在我們幸福了很多。因為feign官方...
Spring Cloud Feign如何上傳檔案
一 feign官方提供了feign 的子專案feign from 1 加依賴 io.github.openfeign.form feign form 3.0.3 io.github.openfeign.form feign form spring 3.0.3 2 介面定義中的註解 requestpa...
Spring Cloud Feign上傳檔案
feign 無法直接傳遞檔案引數,需要在client端引入幾個依賴 方式與普通的檔案上傳方法一致 restcontroller class uploadproducer 2.1 需要在客戶端引入以下依賴io.github.openfeign.form feign form 3.0.3 io.gith...