feign进行文件上传报错解决方案及有多个入参时的注意事项

Feign 多文件未知异常!原因:null 文章目录问题说明解决办法问题分析(以下不感兴趣可跳过,只是记录自己思考的过程,内容顺序上可能有些杂乱) 问题说明 项目中需要用到feign调用多文件的接口,出现这个问题的前提是已经参照多数博客中的方法,为feign客户端重写了编码器的配置,可以参照feign多文件上传。我不知道这些博主有没有出现我这个问题,但是我按照他们的配置后,确出现了以下问题,前台返回了这个错误 未知异常!原因是: null 后台的异常是,无关紧要的省略了 feign.codec.EncodeException . . . Ca 阅读详情

一、情景回顾

1、简单的文件上传的接口

  /**
   * 文件上传MultipartFile格式
   *
   * @param multipartFile 源文件
   * @param filename 自定义文件名称,允许为空,为空时直接从源文件中拿
   * @return
   */
  @RequestMapping("/uploadFileForMultipartFile")
  @LogModuleAnnotation(operate = OperatorType.Upload, operateObject = "oss/文件上传/MultipartFile格式")
  public Result uploadFileForMultipartFile(
      @RequestParam(value = "file") MultipartFile multipartFile, String filename) throws Exception {
    if (StringUtils.isBlank(filename)) {
      filename = UUidUtil.get32Uuid() + "-" + multipartFile.getOriginalFilename();
    }
    return Result.success(ossService.uploadFileForMultipartFile(multipartFile, filename));
  }

2、最初Provider类中的写法(错误版)

因为原来的文件上传接口在跟前端对接时用了form data的格式,对接没问题,于是就在provider中也用这种格式去写了:

@PostMapping(value = "/oss/uploadFileForMultipartFile")
Result<String> uploadFileForMultipartFile(@RequestParam(value = "file") MultipartFile multipartFile,String filename) throws Exception;

但是方法没有调用成功,且服务提供端打印的日志显示:

upload file size limit:Current request is not a multipart request

二、问题解决过程

  1. 百度feign调用文件上传失败的解决方案

参考阅读:

解决feign微服务间的文件上传报错问题1

因为服务调用者MultipartFile的value跟服务提供者@RequestPart中的value值不一样导致的。
在服务调用者MultipartFile的value要跟服务提供者的@RequestPart中的value值一样。

解决feign微服务间的文件上传报错问题2

feign上传文件--产生的错误

文件属性需要使用 @RequestPart 属性,而且在请求中添加 consumes = MediaType.MULTIPART_FORM_DATA_VALUE ,
文件表单上传请求通常使用的ContentType为 multipart/form-data ,通过以上直接调用feign的方式即可实现feign 文件上传

补充说明:
produces:它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

得知:需要在MultipartFile对象前使用@RequestPart注解,且在请求方式的添加 consumes = MediaType.MULTIPART_FORM_DATA_VALUE等属性

2、进行调试(错误版)

@PostMapping(value = "/oss/uploadFileForMultipartFile",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<String> uploadFileForMultipartFile(@RequestPart(value = "file") MultipartFile file, String filename) throws Exception;

很尴尬,直接启动报错了,先前feign调用该post方法时,虽然功能失败,但不至于启动报错

百度翻译了一下异常信息的意思是:正文参数不能与表单参数一起使用

可能是@RequestPart注解的原因导致了这个问题

java.lang.IllegalStateException: Body parameters cannot be used with form parameters.

三、最终修改方案(正确版)

于是在方法另外一个参数上加上@RequestParam注解再次进行调试,终于成功了

 @PostMapping(value = "/oss/uploadFileForMultipartFile",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  Result<String> uploadFileForMultipartFile(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "filename",required = false)String filename) throws Exception;

1、MediaType.APPLICATION_JSON_UTF8_VALUE不一定需要指定,其他需要注意的部分已经用 黄色加粗 标注

@PostMapping(value = "/oss/uploadFileForMultipartFile",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

Result<String> uploadFileForMultipartFile(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "filename",required = false)String filename) throws Exception;

2、APPLICATION_JSON_UTF8_VALUE过时截图,可以根据项目中使用的版本决定

基于Feign的微服务文件与复杂参数传输 1、问题背景 随着微服务普及程度的提升,IT人员面对的问题也随之复杂。原先微服务之间只进行简单参数的传输,而随着文件服务的微量化,微服务之间也需要进行文件传输,因此本文旨在解决以下两个问题: (1) 实现服务之间的文件传输; (2) 实现服务之间复杂参数的传输(例如:实体中含有文件类型参数); 2、结构介绍 本文主要使用上图红色框中的四个组件: eureka-server:服务注册中心 eureka-common:公共类与工具存放 eureka-client:服务提供者 eureka. 阅读详情

相关推荐

【Feign】⭐️ 混合编码实战:SpringFormEncoder 同时支持 MultipartFile 与 @RequestBody 参数传递

本文详细介绍了在微服务开发中使用Feign实现混合编码的实战方案,通过SpringFormEncoder包装SpringEncoder的方式,同时支持MultipartFile文件上传和@RequestBody JSON参数传递。文章分析了传统方案的局限性,提供了完整的配置示例和最佳实践,帮助开发者解决微服务间复杂数据传输的难题。

weixin_26869081的博客 417

OpenFeign之feign使用简介(十一)

个人博客请访问http://www.x0100.top feign中实体类和JSON字符串的转换和传输 首先拿到OpenFeign之第一个Feign程序(十)这篇博客底部的源码,分别运行三个项目的**App类里面的main方法,启动三个项目。实际上我们已经在这篇博客中做到了返回一个实体类的JSON字符串,并且在feign客户端将返回的实体类JSON字符串通过解码器转换成实体类。接...

HelloWorld搬运工 1504

RuoYi后端HTTP请求实战:从502错误排查到RestTemplate/Feign/WebClient配置优化

HTTP请求是后端服务与外部API或内部微服务通信的核心技术,其底层基于TCP/IP协议,通过建立连接、发送请求报文、接收响应报文完成数据交换。理解其原理对于构建稳定、高性能的应用至关重要。在Java生态中,Spring框架提供了RestTemplate、WebClient和Feign等多种客户端实现,每种都有其适用的并发模型和配置策略。合理配置连接池、超时和重试机制,能显著提升系统弹性,避免因下游服务抖动导致的级联故障。特别是在处理类似502 Bad Gateway或422 Unprocessable E

weixin_33835103的博客 393

Feign传递文件以及MultipartFile对象

Feign微服务调用传递文件以及MultipartFile参数对象,多个参数,MultipartFile对象和json数据。

yangfeng20的博客 1万+

Spring Cloud微服务里传文件踩坑记:一个FeignConfig同时搞定@RequestBody和MultipartFile

本文深入探讨了Spring Cloud微服务中同时处理JSON格式的`@RequestBody`和`MultipartFile`文件上传的挑战,并提供了一个基于FeignConfig的通用解决方案。通过组合使用`SpringFormEncoder`和`SpringEncoder`,开发者可以轻松实现混合参数传递,避免常见的编码错误。文章还涵盖了生产环境中的优化技巧和常见问题排查指南,帮助开发者高效应对复杂场景。

weixin_30733003的博客 595

springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服务传输

springboot 中使用httpclient或RestTemplate做MultipartFile文件传输 大家好,因为近期做需求中遇到了文件上传这个东西,而且我这个还是跨服务去传输文件的所以我这边使用了httpclient和RestTemplate去做,但是最后还是用的httpclient。feign和RestTemplate在超大文件下会OOM所以适用于小文件传输我这边测试的在1G以下。httpclient好像是无限哈哈哈。(具体多少大家有时间可以去测一下) 1.被调用服务的Controller 1

weixin_41914928的博客 5742

Spring Cloud Open Feign系列【20】GET/POST请求使用案例及注意事项

文章目录前言HTTP 请求方式GET请求案例1. 没有参数2. 多个基础类型参数4. 集合数据参数5. 单个对象参数6. 多个对象参数7. 下载文件POST 请求案例1. 传递单个对象参数2. 传递多个对象参数3. 上传文件 前言 在之前,我们分析了Feign 的基本原理及相关源码,实际在使用时还是需要额外注意Feign 调用接口的编写,需要安排其规定的格式,不然那很容易出错,下面就总结一下常用的GET/POST请求时需要注意的问题。 HTTP 请求方式 GET和POST是HTTP请求的两种基本方法,最直

记录知识、锤炼自我 6142

SpringCloud - OpenFeign 参数传递和响应处理(全网最详细)

因为 openfeign 是 伪HttpClient 对象,我们在远程调用他的客户端提供的接口时,并不知道你到底是路径传参还是问号传参,因此需要通过注解的方式来指明传参方式(就像 Spring Web 一样,只不过 Spring Web 中如果没指明传参类型,底层会按默认方式走,而 openfeign 则没有).然而,需要注意的是,OpenFeign 只能处理简单的 Java 对象和 Map 对象,对于复杂的 Java 对象或包含特殊类型的对象,可能无法自动进行正确的序列化和反序列化。

CYK_byte的博客 7573

feign调用文件上传的接口,需要进行相关的配置

@FeignClient(name = “jjt-vend-backend-server”,configuration = FeignMultipartSupportConfig.class) public interface FileClient { //调用上传图片接口 /** * 跨服务调用的方法,注意MultipartFile的注解要用@RequestPart */ @RequestMap...

weixin_42983973的博客 1471

直击痛点:VS2015离线安装报错“安装包丢失或损坏”的根源分析与精准修复

本文深入剖析了Visual Studio 2015离线安装时出现“安装包丢失或损坏”报错的根本原因,指出问题核心在于安装程序固化的临时路径查找逻辑。文章提供了一步到位的精准修复方案,通过将ISO镜像中的完整packages文件夹复制到安装程序指定的临时路径,即可无需联网、无需操作证书直接解决问题,并对比分析了其他常见方法的局限性。

weixin_27734811的博客 357

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2608

springcloud使用Feign后台内部传递MultipartFile

1.先修改Feign Client接口 import feign.codec.Encoder; import feign.form.spring.SpringFormEncoder; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Bean; import org.springframework.http.MediaType; import or.

linli1991的博客 1473

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用`wx很抱歉,Markdown格式在当前聊天界面无法显示。我将为您提供纯文本格式的博客内容,您可以将其复制到Markdown编辑器中进行格式化。PDF转换工具本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。该工具使用了wxPython和PyMuPDF库。功能该PDF转换工具具有以下功能:1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。

Winfredzhang的博客 2735

SpringCloud 文件上传传输采坑

项目场景: 需要导入Excel,文件传输, 问题描述: 刚开始一直文件传递不过去,后来报错 解决方案: 看了别人的文章,结合自己的项目,报错是因为api引用了高版本的包,web层没引用,最后不支持,在web层引用了低版本的包。最后解决方案如下: pom包引用 <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>..

郭郭 917

​​EMC设计实战:BCI(大电流注入)硬件设计规范

LIN接口:集成TVS管(如PESD5V0S1BL)与共模电感,耐压等级≥20V(8kV HBM)。输入滤波:10μF电解电容(100kHz截止)+ 0.1μF陶瓷电容(10MHz截止)。​:全频段(1MHz-400MHz)注入200mA电流,LIN通信误码率<0.01%。对敏感电路(如传感器)采用隔离电源(如ADuM5000),隔离电压≥3kVrms。​:连续波(CW)与调幅波(AM,调制深度80%)组合,覆盖全频段干扰场景。​:选择低频段(1-100MHz)感量≥100μH的绕线电感,抑制共模电流。

m0_50833886的博客 1932

获取抖音中x-secsdk-csrf-token的方法

获取抖音中x-secsdk-csrf-token的方法

sh_moranliunian的博客 2017

通过Feign跨服务上传文件,getParts错误,头信息设置,boundary为null,multipart错误等

表单参数不是空,初始化并转换表单信息 StandardMultipartHttpServletRequest.initializeMultipart()/parseRequest(HttpServletRequest request)获取boundary值 FileUploadBase.getBoundary(我这里报错了)基础的使用可以参考我之前的文章,可以解决因为版本升级导致无法使用等问题。发现是文件处理文件 Request.parseParts(2562行)把流信息读取到文件中。

yuexiahunone的专栏 925

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

XiaoqiangClub的博客 4671

使用Spring Cloud Feign上传文件

为什么80%的码农都做不了架构师?>>> ...

weixin_33719619的博客 100

手把手教你学Simulink——基于Simulink的重复控制抑制周期性负载转矩扰动

传统的PI调节器在面对这类特定频率的周期性扰动时,会因积分器的相位滞后而导致转速出现明显的纹波(如6次、12次谐波),严重影响系统的控制精度和静音性能。:要在频率 fd​处获得较高的开环增益以抑制扰动,必须大幅增加PI的比例系数 Kp​,但这会牺牲系统的相位裕度,导致高频共振甚至系统失稳;:电机转速变化时,基频 fbase​会变,导致 6次谐波频率 6×fbase​也在变。设系统的采样周期为 Ts​,目标抑制的周期性扰动频率为 fd​(rad/s),则对应的周期采样点数 N=fd​Ts​2π​。

MHD0815的博客 255

6、掌握 CorelDRAW:从基础操作到创意绘图

本文详细介绍了CorelDRAW的基础操作与创意绘图技巧,涵盖软件使用注意事项、常用快捷键、全局与局部设置的区别、Dockers面板的高效使用,并通过绘制带星星图案的球实例,逐步演示了对象创建、编辑、复制、分布优化、元素添加、颜色与特效调整等核心功能,最后讲解了作品的保存与输出方法,帮助用户从入门到进阶掌握CorelDRAW的设计流程。

snow3的博客 120

SpringCloud学习5(Spring Cloud Alibaba)负载均衡Ribbon、Feign负载均衡

SpringCloud提供的一个声明式Http客户端。使得远程调用像调用本地服务一样见到那,只需要创建接口并添加注解即可。Nacos很好的兼容了Feign,Feign默认集成了Ribbon。所以在Nacos下使用Feign则默认实现了负载均衡。负载均衡就是将负载(请求)分摊到各个服务应用上执行。SpringCloud默认整合Ribbon负载均衡。动态扩缩容:Docker、Rancher、K8S。可以通过配置修改负载均衡算法。

Huathy的博客 630

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

springboot跨服务器文件上传,关于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服务传输的问题...

大家好,因为近期做需求中遇到了文件上传这个东西,而且我这个还是跨服务去传输文件的所以我这边使用了httpclient和RestTemplate去做,但是最后还是用的httpclient。feign和RestTemplate在超大文件下会OOM所以适用于小文件传输我这边测试的在1G以下。httpclient好像是无限哈哈哈。(具体多少大家有时间可以去测一下)1.被调用服务的Controller1.这...

weixin_34419203的博客 1231

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

含泪踩坑日记~~记录美好生活

SpringBoot国际化配置 加入spring容器时,方法名必须是localeResolver!!!

weixin_46684099的博客 237

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

openfeign 文件上传(带参数,大文件几百M)

springboot 版本号:2.1.13-RELEASE springcloud 版本 :Greenwich.SR6 openfeign 引入的包是 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 版本号

liaoxiaolin520的博客 4641

springCloud微服务之间传输文件

一般我们上传文件,都会利用MultipartFile进行文件的上传。之前我做数据导入的时候就遇到了问题,项目使用 springcloud,在服务与服务之间调用时,发现MultipartFile上传文件会报错,被调用服务会认为该请求是不合法的文件上传请 求,后来查找资料发现是feign会把文件追加到url上,而且请求头中的contenttype不是文件上传类型,我尝试过在注解中 ...

shuoshuo132的博客 1万+
上一篇: 可执行jar包和可依赖jar包同时生效
下一篇: spring boot 2 配置上传文件大小限制
丶小颜
博客等级 码龄9年 91粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值