9

我正在尝试使用 Feign 和 Eureka 将发布请求从服务器 A 转发到服务器 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[])
4

2 回答 2

9

问题是 Feign 接口中的方法不能有多个“通用”参数。您可以拥有任意数量的标头参数,但不能超过主体。由于@RequestBody 不做任何事情,因此它不被视为标头,而是除了 HttpServletRequest 请求变量之外的另一个变量。

所以我不得不将我的业务逻辑更改为只有一个参数。

于 2016-02-08T10:13:25.193 回答
2

对我来说,问题是我使用@Param(如feign.Param)而不是@RequestParam(如org.springframework.web.bind.annotation.RequestParam)。改变一切@Param@RequestParam我解决它。

我不知道为什么会这样,但Feign 存储库上的一个相关问题可能会稍微解释一下。

于 2019-02-04T06:48:50.553 回答