Feign调用传输文件异常的解决


Posted in Java/Android onJune 24, 2021

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异常!!!

Feign调用传输文件异常的解决

成功案例:

Feign调用传输文件异常的解决

Feign调用传输文件异常的解决

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
SpringAop日志找不到方法的处理
Jun 21 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
SpringBoot整合Mybatis Generator自动生成代码
Aug 23 Java/Android
java多态注意项小结
Oct 16 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
Spring Cloud OAuth2实现自定义token返回格式
Jun 25 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 Java/Android
springcloud之Feign超时问题的解决
Feign调用全局异常处理解决方案
总结一下关于在Java8中使用stream流踩过的一些坑
IDEA使用SpringAssistant插件创建SpringCloud项目
使用feign服务调用添加Header参数
详解Java实现数据结构之并查集
解决SpringCloud Feign传对象参数调用失败的问题
Jun 23 #Java/Android
You might like
PHP的ASP防火墙
2006/10/09 PHP
用PHP函数解决SQL injection
2006/12/09 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
JavaScript修改css样式style
2008/04/15 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
Python 在局部变量域中执行代码
2020/08/07 Python
python代码实现猜拳小游戏
2020/11/30 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
小学生环保标语
2014/06/13 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js
MySQL深分页问题解决思路
2022/12/24 MySQL