问题记录:多文件feign接口传参

1,018 阅读1分钟

feign接口多文件参数处理

常用处理文件方式是单独起一个文件存储服务,提供上传下载接口给前端,前端上传文件后获取文件地址当作参数传给后端,文件存储的地址当作文件下载预览使用

但微服务环境下,由于跨域或者对接其他等需求,不可避免遇见后端需要自己上传文件的情况,想到了使用feign接口调用,进行文件的上传和下载,过程中遇见了多文件多参数传参问题

http接口

正常业务接口接收多参数多文件,可以使用@RequestBody 在实体类里加入 List 类型接收,也可以直接用多个@RequestParam,但是不能@RequestParam MultipartFile file @RequestBody 请求参数

@RequestBody注解,而@RequestBody注解对应的类型是application/json,文件上传注解用的是@MultipartFile注解,而文件MultipartFile对应的类型是multipart/form-data,这两种格式不兼容,所以无论怎么写都是调用失败的。

feign接口

后端feign调用的时候,传文件参数发现出现了丢失参数的问题,使用注解@RequestParam注释文件时发现接收参数获取不到,改为@RequestPart就可以正常使用了。

查询发现@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的,@RequestParam支持’application/json’,也同样支持multipart/form-data请求。

但当请求头中指定Content-Type:multipart/form-data时,传递的json参数,@RequestPart注解可以用对象来接收,@RequestParam只能用字符串接收

R<BladeFile> putFileByName(@RequestParam("fileName") String fileName, 
    @RequestPart("file") MultipartFile file);