【问题标题】:How to upload multiple Multipart files using feign client in Microservice architecture如何在微服务架构中使用 feign 客户端上传多个 Multipart 文件
【发布时间】:2020-02-01 07:24:19
【问题描述】:

我正在尝试使用 feign 客户端上传多个分段文件,但我无法这样做。

经过一番研究, File Upload Using Feign - multipart/form-data

File upload spring cloud feign client

Array Multipart[] file upload using Feign client

客户端:

@FeignClient(name = "file-server", configuration = {FileUploadService.MultipartSupportConfig.class})
@RequestMapping
public interface FileUploadService {

    @RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = MULTIPART_FORM_DATA_VALUE)
    public @ResponseBody
    List<FileUploadResponseDTO> handleFileUpload(@RequestPart(name = "file") MultipartFile[] file);
    @Configuration
    public class MultipartSupportConfig {

        @Autowired
        private ObjectFactory<HttpMessageConverters> messageConverters;

        @Bean
        @Primary
        @Scope("prototype")
        public Encoder feignEncoder() {
            return new SpringFormEncoder(new SpringEncoder(messageConverters));
        }
    }

我正在尝试访问的模块:

@PostMapping(value = "/upload", consumes = MULTIPART_FORM_DATA_VALUE)
@ApiOperation(UPLOAD_FILE)
public List<FileUploadResponseDTO> uploadFiles(@RequestPart(name = "file") MultipartFile[] file){
    System.out.println("****hello ****");

    return fileUploadService.uploadFiles(file);
}

以上对单个 Multipart 文件工作正常,但对多个文件显示以下错误:

Servlet.service() 用于路径 [] 上下文中的 servlet [dispatcherServlet] 引发异常 [请求处理失败;嵌套异常是 feign.codec.EncodeException:无法写入请求:没有为请求类型 [[Lorg.springframework.web.multipart.MultipartFile;] 和内容类型 [multipart/form-data]] 找到合适的 HttpMessageConverter,根本原因 feign.codec.EncodeException:无法写入请求:没有为请求类型 [[Lorg.springframework.web.multipart.MultipartFile;] 和内容类型 [multipart/form-data]

找到合适的 HttpMessageConverter

【问题讨论】:

    标签: java microservices multipart spring-cloud-feign


    【解决方案1】:

    你应该在 feign 配置时设置编码器:

    public class FeignSimpleEncoderConfig {
        @Bean
        public Encoder encoder() {
            return new FormEncoder();
        }
    }
    

    【讨论】:

    • 仍然是同样的问题:无法写入请求:没有为请求类型 [[Lorg.springframework.web.multipart.MultipartFile;] 和内容类型 [multipart/form-data]" 找到合适的 HttpMessageConverter,
    • 我认为你错过了一些要点!让我们验证如下:@Configuration public class FeignSimpleEncoderConfig { @Bean public Encoder encoder() { return new FormEncoder(); } } 然后在 feign 接口中使用它:@FeignClient(name = "file-server", configuration =FeignSimpleEncoderConfig.class) @RequestMapping public interface FileUploadService { ... }
    • 得到 NullPointerException。你确定上面的代码有效吗?我们需要任何依赖项吗?
    • 我只用过这个:&lt;dependency&gt; &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt; &lt;/dependency&gt;
    猜你喜欢
    • 2018-09-19
    • 2019-10-16
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多