Feign調(diào)用傳輸文件異常的解決
1. Current request is not a multipart request
feign接口參數(shù)使用 @RequestPart 而非 @RequestParam, 同時(shí)需要指定consumes,比如這樣:
@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<FileStorage> upload(@RequestPart(value = "file") MultipartFile file);
2. Feign failed and no fallback
這是hystrix導(dǎo)致,關(guān)閉feign熔斷,或者延長(zhǎng)熔斷的超時(shí)時(shí)間,我簡(jiǎn)單粗暴的直接關(guān)了
3.Read timed out executing POST for “xxx”
配置了hystrix還不行,或者延長(zhǎng)ribbon的超時(shí)時(shí)間,參考了Feign超時(shí)問(wèn)題的辦法,簡(jiǎn)單來(lái)說(shuō)就是feign經(jīng)過(guò)了ribbonn和hystrix兩級(jí)調(diào)用,而且都有一個(gè)默認(rèn)的超時(shí)時(shí)間,延長(zhǎng)超時(shí)時(shí)間就好了
spring:
servlet:
context-path: /farm
application:
name: farm
profiles:
active: dev
main:
allow-bean-definition-overriding: true
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7001/eureka
instance:
prefer-ip-address: true
#關(guān)閉feign熔斷
feign:
hystrix:
enabled: false
#開(kāi)啟熔斷,關(guān)閉熔斷超時(shí)或延長(zhǎng)調(diào)用超時(shí)時(shí)間
#hystrix:
# command:
# default:
# execution:
# timeout:
# enabled: false
# isolation:
# thread:
# timeoutInMilliseconds: 30000
#延長(zhǎng)ribbon超時(shí)時(shí)間
ribbon:
ReadTimeout: 30000
ConnectTimeout: 30000
通過(guò)Feign上傳文件(踩坑)
引入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
服務(wù)提供者:
@RestController
@RequestMapping("/file")
public interface FileUploadService {
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST, consumes = MULTIPART_FORM_DATA_VALUE)
CommonResult<String> uploadFile(@RequestPart("file") MultipartFile file,
@RequestParam(value = "containerName", required = false) String containerName
}
具體實(shí)現(xiàn)不是重點(diǎn)……根據(jù)你的實(shí)際情況去完成……
服務(wù)調(diào)用者:
@RestController
@FeignClient(value = "XXXXXXXX", configuration = FileUploadServiceFeign.ClientConfiguration.class)
@RequestMapping("/file")
public interface FileUploadServiceFeign extends FileUploadService {
/**
* 配置類
*/
class ClientConfiguration {
/**
* 此處注入的是: ObjectFactory<HttpMessageConverters>
*/
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
}
這樣就行了……
需要注意的是:
在服務(wù)調(diào)用者那層的MultipartFile的value要跟服務(wù)提供者的@RequestPart中的value值一樣。不然它會(huì)拋出400異常?。?!

成功案例:


以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring詳細(xì)講解FactoryBean接口的使用
這篇文章主要為大家介紹了Spring容器FactoryBean工廠實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
java9開(kāi)始——接口中可以定義private私有方法
這篇文章主要介紹了從java9開(kāi)始 接口中可以定義private私有方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-10-10
詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別
CompletableFuture實(shí)現(xiàn)了CompletionStage接口和Future接口,前者是對(duì)后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力,使Java在處理多任務(wù)的協(xié)同工作時(shí)更加順暢便利2021-10-10
spring boot security設(shè)置忽略地址不生效的解決
這篇文章主要介紹了spring boot security設(shè)置忽略地址不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
啟動(dòng)SpringBoot報(bào)JavaMail加載錯(cuò)誤的原因分析和解決
這篇文章給大家介紹了啟動(dòng)SpringBoot報(bào)JavaMail加載錯(cuò)誤的原因分析和解決,文中通過(guò)代碼示例給出了詳細(xì)的原因分析和解決方法,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break
這篇文章主要介紹了Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09
IDEA @SpringBootApplication報(bào)錯(cuò)原因及解決
這篇文章主要介紹了IDEA @SpringBootApplication報(bào)錯(cuò)原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

