微服务OpenFeign接口调用传输文件的同时传输表单字段
feign在调用服务接口的时候,如果传输的是json,map,list对象等类型数据基本上不会有什么问题,但是如果在传输文件时候如果feign接口注解使用不当就会出错,从而导致服务提供接口的multipart参数为null。@RequestParam 与@RequestPart都支持multipart/form-data表单提交请求的方法上。feign接口调用服务接口时候,使用@RequestPa
·
前言
feign在调用服务接口的时候,如果传输的是json,map,list对象等类型数据基本上不会有什么问题,但是如果在传输文件时候如果feign接口注解使用不当就会出错,从而导致服务提供接口的multipart参数为null。
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
这里使用的是openfeign,这个是spring cloud在feign基础上对springmvc的支持,也就是feign接口上可以使用springmvc的注解。
feign接口
@FeignClient(name = "READINGBOOK")//指定服务
@Component("readingBookServer")
public interface ReadingBookServer {
@PostMapping(path = "/query/mod", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)//必须指定数据类型
Response<String> modifyBook(@SpringQueryMap Map<String,Object> map,@RequestPart("img") MultipartFile multipartFile)
throws IOException;
//map传递表单字段
//map不要使用@QueryMap和@Parm注解,因为这两个注解会将字段直接拼接到URl上
//这里map不能使用@RequestPart注解,不然会出现LinkHashMap不支持解码错误
//MultipartFile必须使用@RequestPart注解,如果使用@RequestParam 会导致服务提供接口接收不到文件
}
服务提供接口
@PostMapping(path = "/mod", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Response<String> modifyBook(@RequestParam Map<String, Object> book,
@RequestParam(value = "img", required = false) MultipartFile multipartFile)
throws IOException {
log.info("book={}", book.toString());
log.info(multipartFile.getOriginalFilename());
return Response.success("成功!");
}
调用feign接口
@PostMapping("/mod")
public Response<String> modifyBook(@RequestParam Map<String, Object> book,
@RequestParam(value = "img", required = false) MultipartFile multipartFile)
throws IOException {
log.info(book.toString());
log.info(multipartFile.getOriginalFilename());
return readingBookServer.modifyBook(book,multipartFile);
}
测试
服务调用端
服务提供端
可以看见服务提供端成功接受到了文件
总结
- @RequestParam 与@RequestPart都支持multipart/form-data表单提交请求的方法上。
- feign接口调用服务接口时候,使用@RequestPart来标识文件。
- 如果服务间想要在传输文件的同时需要传输formdata的表单字段的话,那么feign接口得到传递的表单字段需要使用 @RequestParam 或者@SpringQueryMap(参数类型是Map)来注解标识。
更多推荐
已为社区贡献1条内容
所有评论(0)