Feign调用传输文件异常的解决
1. Current request is not a multipart request
feign接口参数使用 @RequestPart 而非 @RequestParam, 同时需要指定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导致,关闭feign熔断,或者延长熔断的超时时间,我简单粗暴的直接关了
3.Read timed out executing POST for “xxx”
配置了hystrix还不行,或者延长ribbon的超时时间,参考了Feign超时问题的办法,简单来说就是feign经过了ribbonn和hystrix两级调用,而且都有一个默认的超时时间,延长超时时间就好了
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 #关闭feign熔断 feign: hystrix: enabled: false #开启熔断,关闭熔断超时或延长调用超时时间 #hystrix: # command: # default: # execution: # timeout: # enabled: false # isolation: # thread: # timeoutInMilliseconds: 30000 #延长ribbon超时时间 ribbon: ReadTimeout: 30000 ConnectTimeout: 30000
通过Feign上传文件(踩坑)
引入依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
服务提供者:
@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 }
具体实现不是重点……根据你的实际情况去完成……
服务调用者:
@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)); } } }
这样就行了……
需要注意的是:
在服务调用者那层的MultipartFile的value要跟服务提供者的@RequestPart中的value值一样。不然它会抛出400异常!!!
成功案例:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
详解Java CompletableFuture使用方法以及与FutureTask的区别
CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步回调、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利2021-10-10spring boot security设置忽略地址不生效的解决
这篇文章主要介绍了spring boot security设置忽略地址不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07启动SpringBoot报JavaMail加载错误的原因分析和解决
这篇文章给大家介绍了启动SpringBoot报JavaMail加载错误的原因分析和解决,文中通过代码示例给出了详细的原因分析和解决方法,对大家的学习或工作有一定的帮助,需要的朋友可以参考下2024-01-01IDEA @SpringBootApplication报错原因及解决
这篇文章主要介绍了IDEA @SpringBootApplication报错原因及解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01
最新评论