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);