spring cloud Feign使用中に発生した問題を詳しく説明してまとめます。


本論文では、spring cloud Feign使用中に発生した問題のまとめを紹介します。
問題1:
前の例では、私達は言ったことがあります。

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET) 
@GetMapping("/user/{id}") 
この二つの注釈の効果は等価ですが、Feignでは上記のような方式しか使えません。直接@GetMappingを使うことができません。以下のように、前の例を@GetMappingに変えて効果を見てみます。注解を修正してサービスを再起動する時、下記のような異常を投げました。

Caused by: java.lang.IllegalStateException: Method findById not annotated with HTTP method type (ex. GET, POST) 
異常という意味は、HTTPを指定する方法がないということです。
問題二:
前の例では、私達がレストfulサービスを見逃す方法は以下の通りです。

@GetMapping("/template/{id}") 
  public User findById(@PathVariable Long id) { 
    return client.findById(id); 
  } 
ここでは、findById法のパラメータの中で、直接使用しました。

@PathVariable Long id 
Feignの方式も以下のように変更します。

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET) 
  User findById(@PathVariable Long id); 
そしてサービスを開始して、私達はまた異常を投げました。異常情報は以下の通りです。

Caused by: java.lang.IllegalStateException: PathVariable annotation was empty on param 0. 
大体の意味はPathVarable注解の最初のパラメータは空にできないということです。

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET) 
  User findById(@PathVariable("id") Long id); 
再起動したら、すべてOKです。
問題三:マルチパラメータ問題

@RequestMapping(value="/user/name", method=RequestMethod.GET) 
  User findByUsername(final String userName, final String address); 
サービスを開始する時、下記の異常を報告します。
Caused by:java.lang.Illege StarteException:Method has too many Body parameters:public abstract comput.chliu.springboot.rets.vo.User comput.spring.spright.sprigboot.rect 
異常原因:Feignを使用すると、get要求が送信される場合、要求パラメータの前に@Request Param注解修飾を加える必要があり、Controllerの中にこの注釈修飾を加えなくても良い。
上記の問題の解決策は以下の通りです。

@RequestMapping(value="/user/name", method=RequestMethod.GET) 
  User findByUsername(@RequestParam("userName") final String userName, @RequestParam("address") final String address); 
問題4:Request method'POST'not supported
エラーコードの例:

@RequestMapping(value="/user/name", method=RequestMethod.GET) 
  User findByUsername(final String userName, @RequestParam("address") final String address); 
注意:上のuserNameパラメータは@Request Paramでコメントしていません。要求を送信すると、呼び出されたサービスはRequest method'POST'not supportedに報告されています。私たちはGET方法を使っていますが、なぜサービスを呼び出されたのか?自動的にrequest bodyとして処理されます。bodyがある限り、feignはpostリクエストと見なされますので、全体のサービスはrequest parameterとbodyを伴うpostとして送信されます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。