'身体参数太多' Feign客户端的例外情况

时间:2015-12-04 09:41:41

标签: java spring rest netflix-feign

我使用Springs Feign Client功能从一个微服务到另一个微服务进行通信。

现在,被调用的服务公开了一个REST接口,它接受一个文件和一个相关的(JSON)对象。

@RequestMapping(value = {CONVERT_PATH, APPLICATION_PATH + CONVERT_PATH}, method = RequestMethod.POST, produces = CONTENT_TYPE)
    public ResponseEntity<InputStreamResource> convert(@RequestPart("file") MultipartFile file, @RequestParam("input") Input in) {...}

此界面运行正常,我已通过从其他来源向其发送有效的多部分/混合实体来验证这一点。

然后,在我的其他服务中,我设置了一个匹配的假装客户端来使用这个界面:

@FeignClient("convert")
public interface ConvertClient {
    @RequestMapping(value = CONVERT_PATH, method = RequestMethod.POST, consumes = "multipart/mixed")
    ResponseEntity<InputStreamResource> convert(@RequestPart("file") MultipartFile file, @RequestPart("input") Input in);
}

同样,从一个服务到另一个服务的连接正在运行,我已经在假装客户端(不使用多个部分的一个)中使用不同的请求接口验证了这一点。

当我尝试使用这个特定的接口方法构建(客户端)服务时,我得到以下异常:

FactoryBean threw exception on object creation; 
nested exception is java.lang.IllegalStateException: Method has too many Body parameters: 
public abstract org.springframework.http.ResponseEntity <..>.feign.ConvertClient.convert(org.springframework.web.multipart.MultipartFile,<..>.Input)

我能做些什么来使这项工作? 它可以像我所说的那样到达REST接口,并且不同的假装调用正在工作。如果我没有弄错,这应该有效。 Springs Feign是不支持multipart / mixed for feign接口?

1 个答案:

答案 0 :(得分:1)

我刚刚发布了一个自定义Feign编码器,它能够编码多部分请求(一个或多个文件,以及json部分)。你可以试试here。如果还有其他用例可以实现,请随时告诉我们。