web-dev-qa-db-ja.com

Feign Client + Eureka POSTリクエスト本文

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[])
8
Yoaz Menda

問題は、Feignインターフェースのメソッドが複数の「一般的な」引数を持つことができないことでした。ヘッダー引数は必要な数だけ持つことができますが、本文としては1つまでにすることができます。 @RequestBodyは何も実行しないため、ヘッダーではなく、HttpServletRequestリクエスト変数に加えて別の変数と見なされます。

そのため、パラメータを1つだけにするようにビジネスロジックを変更する必要がありました。

6
Yoaz Menda

私にとっての問題は、@Paramfeign.Paramのように)の代わりに@RequestParamorg.springframework.web.bind.annotation.RequestParamのように)を使用したことでした。すべての@Param@RequestParamに変更すると、問題が解決しました。

これがなぜなのかはわかりませんが、Feignのリポジトリに関連する 質問 が少し説明するかもしれません。

0
asherbar