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
Java Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Android开发手册Chip监听及ChipGroup监听
Jun 10 Java/Android
springboot集成redis存对象乱码的问题及解决
Jun 16 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
HttpClient实现文件上传功能
Aug 14 Java/Android
springcloud之Feign超时问题的解决
Feign调用全局异常处理解决方案
总结一下关于在Java8中使用stream流踩过的一些坑
IDEA使用SpringAssistant插件创建SpringCloud项目
使用feign服务调用添加Header参数
详解Java实现数据结构之并查集
解决SpringCloud Feign传对象参数调用失败的问题
Jun 23 #Java/Android
You might like
PHP学习之整理字符串
2011/04/17 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
js实现日历
2020/11/07 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
用python登录Dr.com思路以及代码分享
2014/06/25 Python
Python模块搜索路径代码详解
2018/01/29 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
《兰亭集序》教学反思
2014/02/11 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
学校通报表扬范文
2015/05/04 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫