この記事では、Spring Cloud Feignの使用で発生した問題の要約を紹介します。それはあなたと共有されます。詳細は次のとおりです。
質問1:
前の例では、それについて話しました
@RequestMapping(value = "/user/{id}"、method = requestmethod.get)@getMapping( "/user/{id}")これら2つの注釈の効果は同等ですが、装いで使用する場合は、上記の方法のみを使用でき、@getMappingを直接使用することはできません。前の例を@getMapping Annotationに変更して、効果を確認しましょう。注釈を変更した後にサービスが再起動されると、次の例外がスローされたことがわかりました。
コードコピーは次のとおりです。
原因:java.lang.illegalstateException:メソッドfindbyid httpメソッドタイプ(ex.get、post)と注釈が付けられていない
例外は、HTTPメソッドを指定しないことを意味します
質問2:
前の例では、次のようにRESTFULサービスを公開しました。
@getMapping( "/template/{id}")パブリックユーザー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);その後、サービスを開始し、例外情報を次のように再度スローすることがわかりました。
コードコピーは次のとおりです。
原因:java.lang.illegalstateException:pathvariableアノテーションは、param 0で空でした。
大まかに、PathVariable Annotationの最初のパラメーターが空になることはできないことを意味します。次の方法に変更します。
@RequestMapping(value = "/user/{id}"、method = requestmethod.get)user findbyid(@pathvariable( "id")long id);もう一度始めて、すべてが大丈夫であることがわかります。
質問3:マルチパラメーターの問題
@RequestMapping(value = "/user/name"、method = requestmethod.get)user findbyusername(final string username、final stringアドレス);
サービスを開始すると、次の例外が報告されます。
原因:java.lang.illegalStateException:メソッドにはボディパラメーターが多すぎます:パブリックアブストラクトcom.chhliu.springboot.restful.vo.user com.chhliu.springboot.restful.feignclient.userfeignclient.findbyusername(java.lang.string、java.lang.stling)
例外の原因:feignを使用する場合、getリクエストが送信される場合、@requestparamアノテーションを追加するためにリクエストパラメーターの前に変更する必要があり、コントローラーはこの注釈を追加して変更できません。
上記の問題の解決策は次のとおりです。
@RequestMapping(value = "/user/name"、method = requestmethod.get)user findbyusername(@requestparam( "username")final string username、@requestparam( "address")final string dresder);
質問4:サポートされていない「投稿」を要求します
エラーコードの例:
@RequestMapping(value = "/user/name"、method = requestmethod.get)user findbyusername(final string username、 @requestparam( "address")final stringアドレス);
注:上記のユーザー名パラメーターは、@RequestParam Annotationで変更されていません。リクエストを送信すると、呼び出されたサービスがサポートされていないリクエストメソッド「投稿」を報告していることがわかります。 GETメソッドを明確に使用します。呼び出されたサービスがポストメソッドと見なされるのはなぜですか?その理由は、@RequestParam Annotationによってユーザー名が変更されていない場合、リクエスト本体として自動的に扱われるためです。機関がある限り、それはfeignによるPOST要求と見なされるため、サービス全体がリクエストパラメーターとボディを使用したPOSTリクエストとして送信されます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。