【问题标题】:Unable to upload file due to Content-Type "multipart/form-data" not set for request body of type StandardMultipartFile由于未为 StandardMultipartFile 类型的请求正文设置 Content-Type“multipart/form-data”,无法上传文件
【发布时间】:2019-11-04 18:09:12
【问题描述】:

我有一个远程服务 A 负责文件上传。我有服务B,它通过FeignClient调用服务A的上传API来上传文件

Service A 中的方法定义类似于

    ResponseEntity<?> upload(@RequestPart("file") MultipartFile file) { }

而Service B中的方法是

    @FeignClient(url = "http://localhost:5000/")
    public interface uploadService {

    @RequestMapping(method = RequestMethod.POST, value = "/serviceA/upload")
    @Headers("Content-Type: multipart/form-data")
    void uploadFile(@RequestPart("file") MultipartFile file);
}

我收到了错误 未为 StandardMultipartFile 类型的请求正文设置 Content-Type“multipart/form-data”

我已经尝试了https://github.com/spring-cloud/spring-cloud-netflix/issues/867 上的大部分建议和 https://github.com/OpenFeign/feign-form 但对我没有任何作用

【问题讨论】:

    标签: spring-boot spring-cloud-feign


    【解决方案1】:

    我可以通过在 RequestMapping 中简单地添加 consumes = "multipart/form-data" 来解决这个问题。原因是我将基于 spring 的注释与开放的 feign 注释混合在一起。 @Headers("Content-Type: multipart/form-data")Open feign 一起使用。这里我使用了spring-cloud-openfeign,它为Open feign 提供了抽象,并使其易于与spring 框架组件集成。

        @FeignClient(url = "http://localhost:5000/")
        public interface uploadService {
    
        @RequestMapping(method = RequestMethod.POST, value = "/serviceA/upload" consumes = "multipart/form-data" )
         void uploadFile(@RequestPart("file") MultipartFile file);
        }
    

    【讨论】:

      【解决方案2】:

      如果您在测试中遇到问题,只需使用org.springframework.mock.web.MockMultipartFile,您可以将 contentType 设置为构造函数中的参数之一。

      【讨论】:

        猜你喜欢
        • 2021-08-28
        • 1970-01-01
        • 2022-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        相关资源
        最近更新 更多