feign传递多个参数,feign 传文件
目录
假装传递参数类型为多文件引入专家依赖加入配置类在假装客户端进行配置假装传参多文件问题解决首先引入依赖新建假装的配置在假装接口中配置
feign传递参数类型为MultipartFile
假装默认是不支持多媒体文件类型的文件传输的,但是可以通过引入第三方冲突包解决这个问题,步骤可以分为三步。
引入maven依赖
依赖性groupIdio.github.openfeign.form/groupId artifactId Fei-form/artifactId版本3 .3 .0/版本/依赖性groupIdio.github.openfeign.form/groupId artifactId Fei-form-spring/artifactId版本3 .3 .0/版本/依赖性
加入配置类
@配置公共类FeignMultipartSupportConfig { @ Bean @ Primary @ Scope( prototype )公共编码器multipartFormEncoder(){ return new SpringFormEncoder();} @Bean public feign .伐木工。level multipartLoggerLevel(){ return feign .伐木工。水平。已满}}
在feign客户端进行配置
导入org。spring框架。云。打开假装。假装客户;导入org。spring框架。http。媒体类型;导入org。spring框架。网络。绑定。注释。请求映射;导入org。spring框架。网络。绑定。注释。请求方法;导入org。spring框架。网络。绑定。注释。请求参数;导入org。spring框架。网络。绑定。注释。请求零件;导入org。spring框架。网络。多部分。多部分文件;导入配置FeignMultipartSupportConfig导入佯。回应;@FeignClient(value= ,fallback=fileservicefallback。class,configuration=feignmultipartsupportconfig。类)公共接口IFileService { //上传文件@请求映射(value=/RMI/file service/mediaImgUpload ,生成={MediaType .APPLICATION_JSON_UTF8_VALUE},consumes=MediaType .多部分格式数据值)公共字符串mediaImgUpload(@请求部分多部分文件文件);//下载文件@ request mapping(value=/RMI/文件服务/媒体下载,method=RequestMethod .GET,consumes=MediaType .应用程序_ JSON _ UTF8 _值)公共响应媒体下载(@ request param(必需=tr
ue) String mediaId);
feign传参MultipartFile问题解决
首先,feign服务之间的调用,传参默认的格式为:ContentType=application/x-www-form-urlencoded
以表单的形式传参的,而文件流的传参,需要form-data的ContentType,否则会报错的
首先引入依赖
<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.8.0</version> </dependency>
注意spring boot版本是2.x以上的,上面两个依赖的版本不低于3.5.0,否则还是无效的
新建feign的配置
package com.wm.blog_config.config; import feign.codec.Encoder;import feign.form.spring.SpringFormEncoder;import org.springframework.beans.factory.ObjectFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.http.HttpMessageConverters;import org.springframework.cloud.openfeign.support.SpringEncoder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; /** * @author :半卷流年 * @description : 解决feign传递流数据的异常 * @createTime :2020/6/14 */@Configurationpublic class FeignSupportConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(new SpringEncoder(messageConverters)); } }
在feign接口中配置
package com.wm.blog_admin.feign; import com.wm.blog_admin.feign.factory.PictureClientFallbackFactory;import com.wm.blog_common.constatnt.CommonConstant;import com.wm.blog_common.domain.TFileDO;import com.wm.blog_common.entity.TFile;import com.wm.blog_common.req.TFileQuery;import com.wm.blog_common.result.Result;import com.wm.blog_config.config.CustomFeignConfig;import com.wm.blog_config.config.FeignSupportConfig;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile; import java.util.List; /*** * @ClassName: PictureFeignClient * @Description: picture feign调用 todo feign使用get有坑啊,是否考虑使用HttpClient替换feign的HttpURLConnection,采用apache的HttpClient * @Author: wm_yu * @Create_time: 16:39 2020-3-26 */@FeignClient(value = CommonConstant.PICTURE_MODULE_NAME, configuration = {CustomFeignConfig.class, FeignSupportConfig.class}, fallbackFactory = PictureClientFallbackFactory.class)public interface PictureFeignClient { /** * id查询图片信息 * @param id * @return */ @GetMapping("/web/picture/{id}") Result<TFileDO> get(@PathVariable("id") Long id); /** * id批量查询图片信息 * @param idList * @return */ @PostMapping("/web/picture/getByIdList") Result<List<TFile>> getByIdList(@RequestBody List<Long> idList); /** * 文件上传 * @param file * @return */ @PostMapping(value = "/web/picture/uploadFile",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) Result<String> uploadFile(@RequestPart("file") MultipartFile file); }
注意加上这个,表示传参格式:
就可以传参了的
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。