当前位置: 首页 > 知识库问答 >
问题:

'过多的身体参数'的异常在FaignClient

鲁涵意
2023-03-14

我正在使用Springs FaignClient功能从一个微服务到另一个微服务进行通信。

现在,被调用的服务公开了一个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 Faign是否只是不支持多部分/混合的外部接口?

共有1个答案

壤驷深
2023-03-14

我刚刚发布了一个定制的外置编码器,可以对多部分请求(一个或多个文件,以及json部分)进行编码。你可以在这里试试。让我知道是否还有其他可以实现的用例,请随时打开问题。

 类似资料:
  • 问题内容: 我在sql server中创建了一个存储过程来馈送SSRS,以允许它接受多个值。我已经创建了它,当我在报表中使用它或在sql server中执行它时,出现以下错误消息。我有什么想念的吗?谢谢 这是我的示例数据。随时使用它创建表 这是我的动态存储过程代码 谢谢 错误的梅格 问题答案: 还有另一种方法可以做到这一点。为何不使用函数拆分参数,而不是将值传递给动态查询? 一旦选择了其中一个功能

  • 问题内容: 我有一个发送参数的表格。在我的表格中,我有一个复选框。如果未选中我的复选框,则不会获得任何参数。 如果在我的模块中,我有: 并且如果未选中我的复选框(未传递参数) 然后在调试模式下,我收到错误消息: 错误的请求浏览器(或代理)发送了该服务器无法理解的请求。 什么都没有告诉我错误是什么。 我通过使用防止了异常: 但是我不能改变Flask处理这种​​情况的行为吗? 问题答案: 如果未定义参

  • 我想通过Spring过滤器或方面记录超文本传输协议请求中的请求参数。我尝试了不同的方法,但请求参数为空或未调用方法。我使用的是POSTMAN,它是一个POST请求。 http://localhost:8080/available data 请求正文示例: {“keyUserAgent”:“CFNetwork/1209 Darwin/20.2.0”,“locale”:“en_US”,“eid”:“8

  • 问题内容: 背景:我正在编写一个简单的UDP应用程序对我管理的beta服务器执行ping操作,以便告诉我它仍然可以正常运行(我无法对那些想知道的服务器启用ping操作)。我打算在手机上运行此命令,以在服务器不再响应时警告我。 我试图像这样使用看似简单的java.net.DatagramSocket: 我还要说一句,我已通过android清单启用了Internet权限,如果删除了use子句,则会出现

  • 我是相当新的JNI善良,所以请告诉我,如果我是愚蠢的。 我试图将一个自定义异常从C扔到Java层,该层由字符串和整数构成。我无法让ThrowNew()工作,因为它只需要一个字符串参数。我能找到的每个自定义异常的例子都使用ThrowNew()!!Grrrrr 我猜我需要构造一个,并用“扔(jthrowable obj)”扔出去,但我不确定...这和“扔新()”一样吗?? 例如,这就是我需要的: 如果

  • 我在RestController类中有以下requestMethod,它运行良好: 我还有一个假客户也工作得很好。我在两种方法中都添加了一个名为forceSupplier的新参数,但添加后,我发现,但我真的不明白为什么我会收到此消息,因为参数是相同的。 这是假装的方法: 我做错了什么?谢谢