踩坑:
FeignClient 调用文件上传接口,接收端显示对应参数为null。
解决方案以及查找办法:
原因: 其实发送端将文件发送过了,但是name的参数不是multipartFile,feign里的注解@RequestPart的value属性指定的参数名,并没有生效。在请求出打印request.getParts()可看到详细信息
@RequestMapping(value = "/uploadMultipartFile", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadMultipartFile(@RequestParam("file") MultipartFile[] file, HttpServletRequest request) {
try {
Collection<Part> parts = null;
try {
parts = request.getParts();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println(JSONObject.toJSONString(parts, true));
} catch (IOException e) {
throw new CommonExecption(ExceptionEnum.UPLOAD_FILE_ERROR);
} catch (UpException e) {
throw new CommonExecption(ExceptionEnum.UPLOAD_FILE_ERROR);
}
}
[
{
"contentType":"multipart/form-data; charset=ISO-8859-1",
"headerNames":["content-disposition","content-type","content-transfer-encoding"],
"inputStream":{
"channel":{
"open":true
},
"fD":{}
},
"name":"file", //这里文件名为file,而非multipartFile
"size":15449,
"submittedFileName":"3829155b-b413-482c-bb0c-5e7053988168.xlsx"
}
]
解决方案
@PostMapping(value = "/uploadMultipartFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
String uploadMultipartFile(@RequestPart(value="file") MultipartFile[] file);
fileClient.uploadMultipartFile(file)