Feign客户端+Eureka POST请求体

9

我正尝试使用Feign和Eureka将来自服务器A的post请求转发到服务器B。 Eureka已成功发现两个服务器。

这个可以工作:

@Feignclient
public interface MyFeignClient {
    @RequestMapping(value = "test", = RequestMethod.POST, consumes = "application/json")
    ResponseEntity<String> theActualMethod(
            HttpServletRequest request,
            @RequestHeader("firstHeader") String header1,
            @RequestHeader("secondHeader") byte[] header2);
}

然而,当我将第二个参数更改为@RequestBody以便读取POST请求内容时,我会收到一个异常:

java.lang.IllegalStateException: Method has too many Body parameters: public abstract org.springframework.http.ResponseEntity MyFeignClient.theActualMethod(javax.servlet.http.HttpServletRequest,java.lang.String,byte[])
2个回答

10

问题在于Feign接口中的方法不能有多个“通用”参数。你可以拥有任意数量的header参数,但是不超过一个body参数。由于@RequestBody不起作用,它被视为不是header而是另一个变量,除了HttpServletRequest请求变量以外。

因此,我必须改变我的业务逻辑,只使用一个参数。


我之所以来到这里,是因为我错误地认为@Param("foo") String foo中的所有@Param("foo")都是多余的,于是我将它们全部删除了 :/ - Naruto Sempai
这似乎是他们应该支持的东西。我有同样的问题。找不到其他解决方案。 - Alper Akture

2
对我来说,问题在于我使用了@Param(例如feign.Param)而不是@RequestParam(例如org.springframework.web.bind.annotation.RequestParam)。将所有的@Param更改为@RequestParam解决了我的问题。
我不知道为什么会这样,但Feign存储库上的一个相关问题可能会有所解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接