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实战之用Swing实现通讯录管理系统
Jun 13 Java/Android
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
浅谈Python魔法方法
Jun 28 Java/Android
ObjectMapper 如何忽略字段大小写
Jun 29 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
Java 实现限流器处理Rest接口请求详解流程
Nov 02 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
Springboot集成kafka高级应用实战分享
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自动载入类用法实例分析
2016/06/24 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
vue通过数据过滤实现表格合并
2020/11/30 Javascript
python多进程操作实例
2014/11/21 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
Python列表切片操作实例总结
2019/02/19 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
Python求离散序列导数的示例
2019/07/10 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
如何用PHP实现邮件发送
2012/12/26 面试题
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
J2EE模式面试题
2016/10/11 面试题
退学证明范本3篇
2014/10/29 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
酒店员工管理制度
2015/08/05 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang