解决SpringBoot+SpringCloud中feign调用服务传递参数为MultipartFile的问题
文章目录
- 前言
- 一、前期说明
- 二、使用步骤
- 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的问题相关推荐
- SpringBoot+SpringCloud —— 使用Feign消费服务
转自:https://www.cnblogs.com/yimixiong/p/7927991.html 转:SpringBoot+SpringCloud -- 使用Feign消费服务 Feign简介 ...
- SpringCloud 中 Feign 调用添加 Oauth2 Authorization Header
SpringCloud 中 Feign 调用添加 Oauth2 Authorization Header SpringCloud 中通过 Feign 调用其他服务,当服务使用 Oauth2 授权的时候 ...
- SpringCloud中Feign进行服务调用 java.io.IOException: too many bytes written 问题解决
问题描述 Spring Cloud 中通过 Feign 调用微服务时,报错:java.io.IOException: too many bytes written 问题来源 在 Feign 调用拦截器 ...
- 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 前言 ...
- feign调用service_Spring-cloud-eureka使用feign调用服务接口
Spring-cloud-eureka使用feign调用服务接口的具体方法,供大家参考,具体内容如下 基于spring-boot 2.0以上版本完成的微服务架构 pom.xml org.springf ...
- SpringCloud 中 Feign 核心原理,简单易懂!
目录 SpringCloud 中 Feign 核心原理 Feign远程调用的基本流程 Feign 远程调用的重要组件 Feigh 远程调用的执行流程 SpringCloud 中 Feign 核心原理 ...
- Feign调用服务错误:No qualifying bean of type `HttpMessageConverters`
Feign调用服务错误:No qualifying bean of type `HttpMessageConverters` 最近微服务项目整合Gateway和OpenFeign的时候出现报错 原因 ...
- SpringCloud 中Feign原理(图解)
1 SpringCloud 中Feign原理 1.1 Feign简介 Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端.Spring Clou ...
- 解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题)
解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题) 参考文章: (1)解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题) (2)https: ...
最新文章
- 详解使用DockerHub官方的mysql镜像生成容器
- 何恺明、吴育昕最新成果:用组归一化替代批归一化
- 神经网络的核裂变模型
- 【重要】2022年有三AI实战课程讲师招募,只等你来!
- TObject简要说明-对象的创建流程
- OpenCASCADE:形状愈合之修复
- Bash+R: howto pass parameters from bash script to R(转)
- Spring boot项目整合Hadoop的HDFS
- mysql 查看数据库字段是否存在,mysql查询某张表是否存在某个字段和判断是否存在某个表名...
- JavaScript返回上一页并刷新的多种实现方法(十八)
- 【Swift学习】Swift编程之旅---析构方法(十九)
- 设计模式(8)——外观模式
- python面板数据分析代码_【译】用python做计量之面板数据模型
- 什么是CPU,GPU,TPU,DPU,NPU,BPU
- 【软件工程】三、软件开发过程
- Jekins的简介和使用
- 诱人的Siri 开启人机交互的大门
- Windows相关系统性学习
- 2017级算法模拟上机准备篇(一)
- 海关数据|俄罗斯与中国之间的贸易数据
热门文章
- Django框架学习20--模板变量,模板标签,模板过滤器及自定义模板过滤器,自定义模板标签
- java 实现贪吃蛇小游戏
- PHP多线程批量采集下载图片
- python 中的socket模块——网络编程(一)
- 从IBM Rational Software Architect设计管理器生成基于图的文档
- 根据QQ头像hash分析QQ号(html版)
- 魔兽世界人最多的服务器部落,《魔兽世界》怀旧服哪边人多 联盟部落人数对比一览...
- 如何避免 sql 注入?
- electron 笔记大全(未整理完)
- 分布式技术与实战第七课 高并发下高可用的熔断、降级、限流和负载均衡、监控以及统一的日志系统