一、Feign传输Multipartfile文件的正确方式,Current request is not a multipart request报错解决
1、错误的方式
例如,我们在服务A的Controller中,有一个接收文件上传的接口,具体代码如下:
@PostMapping("/upload")
@ResponseBody
public HttpResult upload(@RequestParam("userId") String userId,@RequestParam("serverCode") String serverCode,
@RequestParam("file") MultipartFile file){
return uploadService.upload(userId,serverCode,file);
}
在子服务B中通过feign来调用服务A中的上传接口,使用如下代码进行调用
@PostMapping(value = "/upload")
HttpResult upload(@RequestParam("userId") String userId,@RequestParam("serverCode") String serverCode,
@RequestParam("file") MultipartFile file);
在程序具体调用执行时,服务A中抛出以下异常
org.springframework.web.multipart.MultipartException: Current request is not a multipart request
2、解决方案
在feign中发送multipartfile文件,应该使用@RequestPart注解来标识,不能使用@RequestParam注解,并且设置请求content-type为multipart/from-data,正确方法如下:
@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
HttpResult upload(@RequestParam("userId") String userId,@RequestParam("serverCode") String serverCode,
@RequestPart("file") MultipartFile file);