Spring Cloud Feign 介面上傳檔案

2021-10-07 20:21:37 字數 1821 閱讀 9577

最近在使用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...