Feign Client + Eureka POST 请求体
Feign Client + Eureka POST request body
我正在尝试使用 Feign 和 Eureka 将 post 请求从服务器 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[])
问题是 Feign 接口中的一个方法不能有一个以上的 'general' 参数。您可以有任意多个 header 个参数,但不能超过 body 个。由于 @RequestBody 不做任何事情,它不被视为 header 而是 HttpServletRequest 请求变量之外的另一个变量。
所以我不得不将我的业务逻辑更改为只有一个参数。
对我来说,问题是我使用了 @Param
(如 feign.Param
)而不是 @RequestParam
(如 org.springframework.web.bind.annotation.RequestParam
)。将所有 @Param
更改为 @RequestParam
为我解决了这个问题。
我不知道这是为什么,但 Feign 存储库中的相关 question 可能会解释一些。
我正在尝试使用 Feign 和 Eureka 将 post 请求从服务器 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[])
问题是 Feign 接口中的一个方法不能有一个以上的 'general' 参数。您可以有任意多个 header 个参数,但不能超过 body 个。由于 @RequestBody 不做任何事情,它不被视为 header 而是 HttpServletRequest 请求变量之外的另一个变量。
所以我不得不将我的业务逻辑更改为只有一个参数。
对我来说,问题是我使用了 @Param
(如 feign.Param
)而不是 @RequestParam
(如 org.springframework.web.bind.annotation.RequestParam
)。将所有 @Param
更改为 @RequestParam
为我解决了这个问题。
我不知道这是为什么,但 Feign 存储库中的相关 question 可能会解释一些。