现有两个项目 需要A项目调用B项目中某个的接口
B项目的接口具体内容
@PostMapping(ConstantURI.IMAGET_URI)
public Result<FileUploadResp> imageFileupload(@RequestParam("file") MultipartFile file,
@RequestParam("type") @NotBlank(message = "类型不能为空") String type,
@RequestParam("id") @NotBlank(message = "上传者id不能为空") String id) {
return fileUploadService.imageFileupload(file, type, id);
}
A项目接口远程调用
consumes: 指定处理请求的提交内容类型
@RequestPart这个注解用在multipart/form-data表单提交请求的方法上
必须带上不然调B项目接口会报500
@FeignClient(name = "com.项目名称")
public interface ImageApi {
@RequestMapping(method = {RequestMethod.POST}, path = "/v1/fileupload/image" ,consumes = MediaType.MULTIPART_FORM_DATA_VALUE )
// @PostMapping(value ="/v1/fileupload/image",consumes ="multipart/form-data" )
Result<FileUploadResp> getImageList(@RequestPart(value = "file") MultipartFile file,
@RequestParam(value = "type") @NotBlank(message = "类型不能为空") String type,
@RequestParam(value = "id") @NotBlank(message = "上传者id不能为空") String id);
}
重点部分
将File转换成MultipartFile 因为MultipartFile是前端传的值 与后端File属性不同 需要强转
如果转换不成功调用B项目接口时会报400的错(我遇到的情况)
1.引用依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
2.强转代码
File file = new File("xxxxxxxxxx");
FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile =new MockMultipartFile("file", file.getName(), "text/plain", input);
3.调用
Result<FileUploadResp> resp=imageApi.getImageList(multipartFile,"user",id);
总结 远程调用 入参是MultipartFile的时候 注意两点 1.请求头不能忘 2.File需要正确强转