文章目录

  • 前言
  • 一、前期说明
  • 二、使用步骤
    • 1.引入maven依赖
    • 2.新建feign的配置类
    • 2.feign客户端
    • 3.被调用的服务的Controller
    • 4.第三方服务远程调用主服务传递MultiPartFile
  • 三、参考博客

前言

本文解决了SpringBoot+SpringCloud在引用feign远程调用服务时传递的参数类型为MultipartFile的问题。


一、前期说明

feign服务之间的调用,传参默认的格式为:ContentType=application/x-www-form-urlencoded
我们需要模拟表单来传递参数,以表单的形式传参时,文件流的传参,需要ContentType为form-data,不然会报错。

二、使用步骤

1.引入maven依赖

依赖坐标如下(应该是只需要feign-form-spring和feign-form两个依赖):
需要注意的是,如果SpringBoot版本是2.x以上的,下面的两个依赖的版本不低于3.5.0,否则引入的依赖无效。

        <!--spring feign form 表单提交相关--><dependency><groupId>io.github.openfeign.form</groupId><artifactId>feign-form-spring</artifactId><version>3.8.0</version></dependency><!--feign form 表单提交相关--><dependency><groupId>io.github.openfeign.form</groupId><artifactId>feign-form</artifactId><version>3.8.0</version></dependency><!--文件上传相关依赖--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><!--添加Springboot对MultipartFile的类库支持,在spring-test包中--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.1.3.RELEASE</version><scope>compile</scope></dependency>

2.新建feign的配置类

将feign的配置类注册到容器中:

/*** @description : 解决feign传递流数据的异常*/
@Configuration
public class MultipartSupportConfig {@Autowiredprivate ObjectFactory<HttpMessageConverters> messageConverters;@Bean@Primary@Scope("prototype")public Encoder multipartFormEncoder() {return new SpringFormEncoder(new SpringEncoder(messageConverters));}@Beanpublic feign.Logger.Level multipartLoggerLevel() {return Logger.Level.FULL;}
}

2.feign客户端

@Service
@FeignClient(value = "CLOUD-XAJ-MODEL", configuration = MultipartSupportConfig.class)
public interface XajModelService {@RequestMapping(value = "/xajmodel", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public R xajModel(@RequestPart("datafile") MultipartFile inputFile);
}
  • @FeignClient(value = “CLOUD-XAJ-MODEL”, configuration = MultipartSupportConfig.class):”在feign客户端标明会使用刚刚注册到容器里的配置类。

  • @RequestMapping(value = “/xajmodel”, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE):表明传参格式。

  • MultiPartFile前面的注解用@RequestPart。

3.被调用的服务的Controller

@RequestMapping(value = "/xajmodel", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public R xajModel(@RequestParam("datafile") MultipartFile inputFile){......//具体服务里面的代码
}
  • 也需要指定一下传参格式:consumes = MediaType.MULTIPART_FORM_DATA_VALUE

4.第三方服务远程调用主服务传递MultiPartFile

        //从本地读取input.txt作为远程调用的参数文件(模拟远程调用的效果)File file = new File("C:\\Users\\dingy\\Desktop\\cloud-xaj-root\\input.txt");InputStream inputStream = new FileInputStream(file);MultipartFile inputFile = new MockMultipartFile("datafile", file.getName(), /*这里我填的"datafile"这个名字应该和你被调用Controller里的@RequestParam("datafile")注解里标明的名字保持一致*/MediaType.MULTIPART_FORM_DATA_VALUE, inputStream);//下面一行就是正式调用新安江模型服务。R result = xajModelService.xajModel(inputFile, itime, W, WU, WL, S, FR, K, B, C, WM, WUM, WLM, IM, SM, EX, KG, KI, CI, CG, Area, QI1, QG1, Qout1, CS, L, Mk, Mx, n);//把新安江计算结果取出来在控制台打印一下List<Double> data = (List<Double>) result.get("data");for (Double i : data) {System.out.println(i);}

三、参考博客

参考博客1:Springboot+ SpringCloud FeignClient发送MultipartFile

参考博客2:feign传参MultipartFile问题解决

解决SpringBoot+SpringCloud中feign调用服务传递参数为MultipartFile的问题相关推荐

  1. SpringBoot+SpringCloud —— 使用Feign消费服务

    转自:https://www.cnblogs.com/yimixiong/p/7927991.html 转:SpringBoot+SpringCloud -- 使用Feign消费服务 Feign简介 ...

  2. SpringCloud 中 Feign 调用添加 Oauth2 Authorization Header

    SpringCloud 中 Feign 调用添加 Oauth2 Authorization Header SpringCloud 中通过 Feign 调用其他服务,当服务使用 Oauth2 授权的时候 ...

  3. SpringCloud中Feign进行服务调用 java.io.IOException: too many bytes written 问题解决

    问题描述 Spring Cloud 中通过 Feign 调用微服务时,报错:java.io.IOException: too many bytes written 问题来源 在 Feign 调用拦截器 ...

  4. feign session 调用_springboot使用feign调用session传递失效解决方案

    标题 框架 version 1 springboot 1.5.9.release 2 springCloud 1.2.4.release 3 eureka 1.6.2 4 feign 9.5.0 前言 ...

  5. feign调用service_Spring-cloud-eureka使用feign调用服务接口

    Spring-cloud-eureka使用feign调用服务接口的具体方法,供大家参考,具体内容如下 基于spring-boot 2.0以上版本完成的微服务架构 pom.xml org.springf ...

  6. SpringCloud 中 Feign 核心原理,简单易懂!

    目录 SpringCloud 中 Feign 核心原理 Feign远程调用的基本流程 Feign 远程调用的重要组件 Feigh 远程调用的执行流程 SpringCloud 中 Feign 核心原理 ...

  7. Feign调用服务错误:No qualifying bean of type `HttpMessageConverters`

    Feign调用服务错误:No qualifying bean of type `HttpMessageConverters` 最近微服务项目整合Gateway和OpenFeign的时候出现报错 原因 ...

  8. SpringCloud 中Feign原理(图解)

    1 SpringCloud 中Feign原理 1.1 Feign简介 Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端.Spring Clou ...

  9. 解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题)

    解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题) 参考文章: (1)解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题) (2)https: ...

最新文章

  1. 详解使用DockerHub官方的mysql镜像生成容器
  2. 何恺明、吴育昕最新成果:用组归一化替代批归一化
  3. 神经网络的核裂变模型
  4. 【重要】2022年有三AI实战课程讲师招募,只等你来!
  5. TObject简要说明-对象的创建流程
  6. OpenCASCADE:形状愈合之修复
  7. Bash+R: howto pass parameters from bash script to R(转)
  8. Spring boot项目整合Hadoop的HDFS
  9. mysql 查看数据库字段是否存在,mysql查询某张表是否存在某个字段和判断是否存在某个表名...
  10. JavaScript返回上一页并刷新的多种实现方法(十八)
  11. 【Swift学习】Swift编程之旅---析构方法(十九)
  12. 设计模式(8)——外观模式
  13. python面板数据分析代码_【译】用python做计量之面板数据模型
  14. 什么是CPU,GPU,TPU,DPU,NPU,BPU
  15. 【软件工程】三、软件开发过程
  16. Jekins的简介和使用
  17. 诱人的Siri 开启人机交互的大门
  18. Windows相关系统性学习
  19. 2017级算法模拟上机准备篇(一)
  20. 海关数据|俄罗斯与中国之间的贸易数据

热门文章

  1. Django框架学习20--模板变量,模板标签,模板过滤器及自定义模板过滤器,自定义模板标签
  2. java 实现贪吃蛇小游戏
  3. PHP多线程批量采集下载图片
  4. python 中的socket模块——网络编程(一)
  5. 从IBM Rational Software Architect设计管理器生成基于图的文档
  6. 根据QQ头像hash分析QQ号(html版)
  7. 魔兽世界人最多的服务器部落,《魔兽世界》怀旧服哪边人多 联盟部落人数对比一览...
  8. 如何避免 sql 注入?
  9. electron 笔记大全(未整理完)
  10. 分布式技术与实战第七课 高并发下高可用的熔断、降级、限流和负载均衡、监控以及统一的日志系统