Feign 在文件上传接口传递 MultipartFile对象时,对应服务的文件上传接口接不到请求

时间:2025-04-11 17:32:06

 

问题:

  Feign 在文件上传接口传递 MultipartFile对象时,对应服务的文件上传接口接不到请求

原因:

    Feign在转发时,是以普通表单形式发送给对应服务,以ContentType=application/x-www-form-urlencoded的表单发送,而文件上传需form-data的ContentType,故服务端接收不到请求

解决方案:

    在@RequestMapping(xxx, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)  添加produces 和 consumes字段指明数据格式(json)和ContentType即可解决问题

 

 

注:若没有设定Feign的回调时间,且文件上传时间超过1秒,则不管请求是否成功,Feign都会调用回调方法返回错误

原因:

    Feign在调用内部服务时,因为熔断器的默认超时时间是1s,而服务处理超过了1s,接口还没处理完,就直接被熔断处理了。

解决方案:

    设置最大超时熔断:  ** 在写这些配置的时候是不会有提示的,但配置还是会生效的

# 熔断器开启 
feign:
  hystrix:
    enabled: true
#hystrix的超时时间
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 9000
#ribbon的超时时间
ribbon:
  ReadTimeout: 3000
  ConnectTimeout: 3000