当前位置: 首页 > news >正文

【Feign】⭐️使用 openFeign 时传递 MultipartFile 类型的参数参考

💥💥✈️✈️欢迎阅读本文章❤️❤️💥💥

🏆本篇文章阅读大约耗时三分钟

⛳️motto:不积跬步、无以千里

📋📋📋本文目录如下:🎁🎁🎁

目录

前言

模拟

解决方案

章末

前言

        小伙伴们大家好,这篇文章主要描述下最近在开发时遇到的一个服务之间通过 openFeign 调用时遇到的参数传递问题,如题目所述,该参数类型正是 MultipartFile。

        在网上有很多解决方案,比如另外引入 feign + spring 的联合依赖(叫什么记不住了),或者转换成字节数组传递,接收方再转换为 MultipartFile 对象(要引入MockMultifile 依赖,应该是这个),然后还有本文使用的这种方案(不用引入依赖,改动也不多)

        先来模拟下大致的使用场景,也可以直接跳过模拟看解决方案(环境不同,也可能解决不了各位的问题,请谅解)

模拟

        本地模拟就以两个简单服务之间的调用实现,对应一个客户端,一个服务端,场景就是从客户端调用服务端的接口,中间需要传递 MultipartFile 类型的参数,要怎么成功把参数传递到服务端

        1、客户端会暴露一个接口,参数为 MultipartFile 类型的 file 参数,然后通过 feign 调用服务端的接口,feign 配置也很简单,指定了服务端地址和定义了一个方法

        2、服务端

        提供的方法很简单,打印 file 的大小,然后返回给客户端该参数的 大小+原始名称

        3、测试

        目前这种情况,在调用客户端暴露的接口,参数可以成功传到客户端,但是从客户端传到服务端的时候会遇到异常,服务端提示异常如下:

Request processing failed; nested exception is 

org.springframework.web.multipart.MultipartException: Current request is not a multipart 

request] with root cause

解决方案

        指定自定义编码器,并且标注请求头,使用 @RequestPart 注解标注参数。具体实现案例如下:

        1、编码配置类

import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author HuangBenben 
 */
@Configuration
public class FeignConfig {

    @Bean
    public Encoder devEncoder() {
        return new SpringFormEncoder();  // 使用 SpringFormEncoder 实现 Encoder 接口
    }
}

        2、feign 接口指定编码和请求头以及参数注解

        @FeignClient 注解中指定 configuration 的值为 自己创建的编码配置类

        具体的方法定义加上对应请求头

        使用 @RequestPart 注解

        3.服务端调整

        服务端在接收参数时也使用 @RequestPart 注解

         4、测试

        可以正常传递参数并且接收到了服务端的返回值

 

章末

        这里简易将使用到自定义编码配置类的 feign 接口统一放到一个调用类中,不要跟正常调用的方法放一起,这里指定了编码配置可能会影响别的方法

        文章到这里就结束了~

往期推荐 > > > 

 【接口负载】✈️整合 Resilience4j 指定接口负载,避免过载

 【SpringBoot】⭐️整合 Redis 实现百万级数据实时排序

 【SpringBoot】✈️本地集成支付宝支付功能

    

相关文章:

  • 【分享】内外网文件摆渡系统:让数据传输更安全更可靠
  • ORB-SLAM学习感悟记录
  • Kotlin 基础语法解析
  • 排序算法3-交换排序
  • 红宝书第二十三讲:详解DOM事件模型:冒泡与事件委托
  • QCustomPlot拖动绘制变慢问题解决方案
  • LM2576手册解读:高效降压型 DC - DC 转换器的全面解析
  • LabVIEW故障诊断数据处理方法
  • Elasticsearch 基本概念与增删改查
  • 【FreeRTOS】裸机开发与操作系统区别
  • 整数二分·二分的思想与模板·经典二分题:数的范围
  • 面基:雪花算法Snowflake时钟回拨问题解决方案
  • Redis 服务端主动回收配置
  • 项目实战 - 用户列表
  • AIP-203 域行为文档
  • MyBatis执行批量插入sqlserver报错:不允许从数据类型 varbinary 到 datetime2 的隐式转换
  • PowerBi 桑基图(SanKey)显示多节点的解决方法
  • 数据结构与算法基本概念
  • 使用大语言模型进行Python图表可视化
  • 【质量管理】质量的系统是预防,那以预防为主的质量管理系统包括什么?
  • 重庆电子工程职业学院教务网/seo是干啥的
  • 做网站帮外国人淘宝/点金推广优化公司
  • 网站的花费/百度首页登录官网
  • pc端和手机端网站建设/便宜的seo网络营销推广
  • 在国际网站做外贸需要条件/营销型网站建设排名
  • 深圳设计公司vi设计模板/选择宁波seo优化公司