亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

使用Spring Cloud Feign上傳文件的示例

2024-07-13 10:14:47
字體:
來源:轉載
供稿:網友

最近經常有人問Spring Cloud Feign如何上傳文件。有團隊的新成員,也有其他公司的兄弟。本文簡單做個總結——

早期的Spring Cloud中,Feign本身是沒有上傳文件的能力的(1年之前),要想實現這一點,需要自己去編寫Encoder 去實現上傳。現在我們幸福了很多。因為Feign官方提供了子項目feign-form ,其中實現了上傳所需的 Encoder 。

注:筆者測試的版本是Edgware.RELEASE。Camden、Dalston同樣適應本文所述。

加依賴

<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.0.3</version></dependency><dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.0.3</version></dependency>


編寫Feign Client

@FeignClient(name = "ms-content-sample", configuration = UploadFeignClient.MultipartSupportConfig.class)public interface UploadFeignClient { @RequestMapping(value = "/upload", method = RequestMethod.POST,   produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},   consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @ResponseBody String handleFileUpload(@RequestPart(value = "file") MultipartFile file); class MultipartSupportConfig {  @Bean  public Encoder feignFormEncoder() {   return new SpringFormEncoder();  } }}

如代碼所示,在這個Feign Client中,我們引用了配置類MultipartSupportConfig ,在MultipartSupportConfig 中,我們實例化了SpringFormEncoder 。這樣這個Feign Client就能夠上傳啦。

注意點

@RequestMapping(value = "/upload", method = RequestMethod.POST,   produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},   consumes = MediaType.MULTIPART_FORM_DATA_VALUE)中的produeces 、consumes 不能少;

接口定義中的注解@RequestPart(value = "file") 不能寫成@RequestParam(value = "file" 。

最好將Hystrix的超時時間設長一點,例如5秒,否則可能文件還沒上傳完,Hystrix就超時了,從而導致客戶端側的報錯。

SpringCloud中使用Feign的坑

示例如下:

@FeignClient("service-resource")//@RequestMapping("/api/test")public interface TestResourceItg { @RequestMapping(value = "/api/test/raw", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded") public String raw1(@PathVariable("subject") String subject, // 標題     @RequestParam("content") String content); // 內容}

說明:

*使用RequestMapping中的consumes指定生成的請求的Content-Type
*RequestParam指定的參數會拼接在URL之后,如: ?name=xxx&age=18
*PathVariable指定的參數會放到一個LinkedHashMap<String, ?>傳入到feign的Encoder中進行處理,而在Spring中實現了該接口的Encoder為SpringEncoder,而該實現又會使用Spring中的HttpMessageConverter進行請求體的寫入。

坑:

*不要在接口類名上使用RequestMapping,雖然可以使用,但同時SpringMVC會把該接口的實例當作Controller開放出去,這個可以在啟動的Mapping日志中查看到
*使用默認的SpringEncoder,在不指定consumes時,PathVariable中的參數會生成JSON字符串發送,且默認情況下不支持Form表單的生成方式,原因為:FormHttpMessageConverter只能處理MultiValueMap,而使用PathVariable參數被放在了HashMap中。默認更不支持文件上傳。其實已經有支持處理各種情況的HttpMessageConverter存在。

填坑:

*支持Form表單提交:只需要編寫一個支持Map的FormHttpMessageConverter即可,內部可調用FormHttpMessageConverter的方法簡化操作。
*支持文件上傳:只需要把要上傳的文件封裝成一個Resource(該Resource一定要實現filename接口,這個是把請求參數解析成文件的標識),使用默認的ResourceHttpMessageConverter處理即可。
*支持處理MultipartFile參數:編寫一個支持MultipartFile的MultipartFileHttpMessageConverter即可,內部可調用ResourceHttpMessageConverter實現,同時注意需要將其添加至FormHttpMessageConverter的Parts中,并重寫FormHttpMessageConverter的getFilename方法支持從MultipartFile中獲取filename
*所有的HttpMessageConverter直接以@Bean的方式生成即可,spring會自動識別添加

完美支持表單和文件上傳:

方案一:

使用附件中的MapFormHttpMessageConverter.java和MultipartFileHttpMessageConverter.java

在Spring中進行如下配置即可

@Beanpublic MapFormHttpMessageConverter mapFormHttpMessageConverter(MultipartFileHttpMessageConverter multipartFileHttpMessageConverter) { MapFormHttpMessageConverter mapFormHttpMessageConverter = new MapFormHttpMessageConverter(); mapFormHttpMessageConverter.addPartConverter(multipartFileHttpMessageConverter); return mapFormHttpMessageConverter;}@Beanpublic MultipartFileHttpMessageConverter multipartFileHttpMessageConverter() { return new MultipartFileHttpMessageConverter();}

方案二:

使用FeignSpringFormEncoder.java

在Spring中配置如下:

@Beanpublic Encoder feignEncoder(ObjectFactory<HttpMessageConverters> messageConverters) { return new FeignSpringFormEncoder(messageConverters);} 

推薦使用方案一

方案二為參考https://github.com/pcan/feign-client-test而來,未測

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品在线免费观看| 日韩精品www| 国产主播在线一区| 日韩精品中文字幕视频在线| 日韩欧美成人免费视频| 日韩中文字幕精品视频| 久久久久免费精品国产| 亚洲自拍另类欧美丝袜| 欧美亚洲成人网| 亚洲女人初尝黑人巨大| 国产精品视频内| 午夜精品在线观看| 中文国产成人精品| 久久97久久97精品免视看| 日韩大片免费观看视频播放| 一区二区三区国产在线观看| 国产欧美一区二区白浆黑人| 俺去啦;欧美日韩| 少妇高潮久久久久久潘金莲| 欧美精品成人91久久久久久久| 欧美日韩高清区| 亚洲毛片在线免费观看| 91免费视频网站| 国产精品美女久久久久久免费| 中文字幕精品www乱入免费视频| 精品国产91久久久久久老师| 中文字幕日韩电影| 亚洲japanese制服美女| 久久综合伊人77777尤物| 亚洲最大成人网色| 国产日韩中文在线| 亚洲aa中文字幕| 久久亚洲精品视频| 中文一区二区视频| 福利视频导航一区| 午夜精品久久久久久久久久久久久| 欧美激情aaaa| 久久av红桃一区二区小说| 欧美在线视频观看免费网站| 中文字幕亚洲精品| 亚洲精品美女视频| 国产精品激情av电影在线观看| 亚洲精品福利免费在线观看| 欧美色xxxx| 日韩av综合网| 久久久久久久久国产| 亚洲色图25p| 色与欲影视天天看综合网| 欧美日韩裸体免费视频| 欧美理论电影网| 成人日韩在线电影| 亚洲2020天天堂在线观看| 亚洲激情视频网| 亚洲日本中文字幕| 欧美激情一区二区三区在线视频观看| 2019亚洲日韩新视频| 97视频在线播放| 中文国产成人精品| 国产精品久久久久久久久久久久久久| 91欧美精品成人综合在线观看| 欧美成人免费全部观看天天性色| 日韩中文有码在线视频| 国产精品美乳在线观看| 精品视频在线播放色网色视频| 亚洲v日韩v综合v精品v| 777777777亚洲妇女| 成人午夜一级二级三级| 91亚洲国产成人精品性色| 亚洲第一福利在线观看| 日韩欧美一区二区三区久久| 不卡av在线网站| 亚洲午夜未删减在线观看| 国产精品欧美在线| 国产精品久久久久久久久久小说| 国产精品久久久久久久一区探花| 成人激情黄色网| 午夜欧美大片免费观看| 精品中文字幕在线| 中文字幕欧美日韩va免费视频| 欧美激情一级精品国产| 国产香蕉97碰碰久久人人| 成人有码视频在线播放| 亚洲一区二区三区在线免费观看| 日韩av中文字幕在线免费观看| 日韩专区在线播放| 欧美亚洲激情在线| 成人免费直播live| 少妇高潮 亚洲精品| 国产精品人人做人人爽| 欧美视频专区一二在线观看| 亚洲大胆人体在线| 九色成人免费视频| 久久精品视频99| 国产精品自拍偷拍| 91精品国产自产91精品| 久久久女女女女999久久| xvideos成人免费中文版| 亚洲激情视频网站| 国产精品美女网站| 亚洲欧美一区二区激情| 中文日韩电影网站| 欧美国产日韩xxxxx| 欧美日在线观看| 欧美激情精品久久久久久免费印度| 亚洲精品一二区| 91精品在线观看视频| 国产噜噜噜噜噜久久久久久久久| 久久黄色av网站| 一本大道久久加勒比香蕉| 亚洲国产精品va在线| 午夜精品一区二区三区在线视| 91精品国产综合久久香蕉| 国产精品高清免费在线观看| 成人欧美一区二区三区在线| 精品性高朝久久久久久久| 欧美激情按摩在线| 日韩精品视频在线免费观看| 日韩在线一区二区三区免费视频| 久久精品电影一区二区| 久久青草精品视频免费观看| 美日韩精品免费观看视频| 国产免费一区二区三区在线观看| 国产啪精品视频网站| 好吊成人免视频| 97精品国产91久久久久久| 国产盗摄xxxx视频xxx69| 国产精品视频自在线| 国产精品96久久久久久又黄又硬| 亚洲精品二三区| 亚州成人av在线| 国产精品入口福利| 中文字幕精品av| 97精品国产97久久久久久免费| xxx成人少妇69| 国产精品国内视频| 91免费电影网站| 欧美精品第一页在线播放| 亚洲第五色综合网| 理论片在线不卡免费观看| 欧美黄网免费在线观看| 黄色一区二区在线观看| 日韩精品视频中文在线观看| 一区二区国产精品视频| 国产成人精品在线| 欧美成人自拍视频| 欧美一区二区三区免费观看| 激情成人在线视频| 欧美激情在线狂野欧美精品| 欧美超级乱淫片喷水| 精品性高朝久久久久久久| 中文字幕精品www乱入免费视频| 狠狠色噜噜狠狠狠狠97| 欧洲精品毛片网站| 欧美丰满少妇xxxxx做受| 美女啪啪无遮挡免费久久网站| 成人激情免费在线| 久久影院免费观看| 8090理伦午夜在线电影| 992tv成人免费影院| 国产成人高清激情视频在线观看| 国产精品久久久亚洲| 一个人看的www久久| 国产精品三级在线| 黑人极品videos精品欧美裸|