其他分享
首页 > 其他分享> > FeignClient调用服务及上传文件的注意点及问题

FeignClient调用服务及上传文件的注意点及问题

作者:互联网

目录

代码示例

	/**
     * 用于上传文传
     * UploadFile包含fileName、fileDesc
     * 不加@RequestParam等同于@RequestParam(required = false)
     * 
     * @param file 文件
     * @param entity 文件的描述
     * @return
     */
    @PostMapping("/add")
    public Response<Object> add(
            @RequestPart(value = "file") MultipartFile file,
            UploadFile entity,
    ) {
        Response<Object> res = new Response<>();
        FileHandlerResult handlerResult = service.saveFile(file);
        return res;
    }
@FeignClient(value = "file-server")
public interface FileService {
    @PostMapping(value = "/static/add", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    Response<LinkedHashMap<Object, Object>> saveFile(
            @RequestPart(value = "file") MultipartFile file,
            @RequestParam(value = "fileName")String fileName,
            @RequestParam(value = "fileDesc")String fileDesc
    );
}

注意点:

  1. 参数是文件类型的要用@RequestPart注解
  2. 调用方需要设置ContentType为multipart/form-data,
@PostMapping(value = "xxx", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  1. 调用方的文件参数名必须与服务接口的文件参数名相同,示例中文件参数都为@RequestPart(value = "file") MultipartFile file,参数名不同会导致服务接口接收到的文件为NULL。

部分异常及解决方案

异常一:Method has too many Body parameters

@GetMapping(value="/test")  
Model test(String arg1,  String arg1); 

异常原因:

注意:使用@RequestParam修饰参数,请求默认的Content-Type 为 application/x-www-form-urlencoded

@RequestBody用来修饰对象

示例:

public int save(@RequestBody Person p, @RequestParam("userId") String userId);

注意:使用@RequestBody修饰参数,请求的默认Content-Type 为 application/json 或 application/xml

异常二:@FeignClient注入找不到的异常

异常原因:
可能为启动类没有标注@EnableFeignClients

Springcloud中的服务间调用是通过Feign进行调用的,在调用方服务中,我们需要定义一些带有@FeignClient注解的接口类。并且在启动类上加上@EnableFeignClients注解。程序启动的时候,会检查是否有@EnableFeignClients注解,如果有该注解,则开启包扫描,扫描带有@FeignClient注解的接口。

异常三:feign.FeignException$MethodNotAllowed: status 405

异常原因:
调用方的方法参数没有标注@RequestParam或参数名与服务接口的参数名不相同

其他问题

标签:FeignClient,点及,RequestParam,文件,value,调用,参数,file,上传
来源: https://blog.csdn.net/weixin_43966635/article/details/113780651