FeignとEurekaを使用して、サーバーAからサーバーBにPOSTリクエストを転送しようとしています。両方のサーバーが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);
}
ただし、POSTリクエストコンテンツを読み取るために2番目の引数を@RequestBodyに変更すると、例外が発生します。
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インターフェースのメソッドが複数の「一般的な」引数を持つことができないことでした。ヘッダー引数は必要な数だけ持つことができますが、本文としては1つまでにすることができます。 @RequestBodyは何も実行しないため、ヘッダーではなく、HttpServletRequestリクエスト変数に加えて別の変数と見なされます。
そのため、パラメータを1つだけにするようにビジネスロジックを変更する必要がありました。
私にとっての問題は、@Param
(feign.Param
のように)の代わりに@RequestParam
(org.springframework.web.bind.annotation.RequestParam
のように)を使用したことでした。すべての@Param
を@RequestParam
に変更すると、問題が解決しました。
これがなぜなのかはわかりませんが、Feignのリポジトリに関連する 質問 が少し説明するかもしれません。