このセクションでは、feignを使用してマルチパラメーターリクエストを構築する方法について説明します。著者は、説明の要求と投稿の要求を例として使用して説明します。他のメソッド(削除、配置など)の要求原則は同じであり、読者は自分でそれらを研究することができます。
複数のパラメーターURLをリクエストします
要求するURLに、http:// microservice-provider-user/get?id = 1&username = zhang sanなどの複数のパラメーターが含まれているとします。
Spring CloudがSpring MVCアノテーションサポートを追加して装備したことがわかっているため、Spring MVCの執筆方法に従って試してみることもできます。
@feignclient( "microservice-provider-user")public interface userfeignclient {@requestmapping(value = "/get"、method = requestmethod.get)public user get0(user user);}ただし、この書き込み方法は正しくなく、コンソールは以下と同様の例外を出力します。
feign.feignexception:status 405 reading userfeignclient#get0(user);コンテンツ:
{"Timestamp":1482676142940、 "status":405、 "error": "Method not"、 "Exception": "org.springframework.web.httprequestmethodnotsexception"、 "メッセージ": "要求のポスト"、「path ":"
例外から、GETメソッドを指定しますが、POSTメソッドを使用してリクエストを送信することがわかります。
それを書く正しい方法は次のとおりです。
(1)方法1
@feignclient(name = "microservice-provider-user")public interface userfeignclient {@requestmapping(value = "/get"、method = requestmethod.get)public user get1( "id")long id、 @requestparam( "username")string username);}これは最も直感的な方法です。 URLにはいくつかのパラメーターがあり、Feignインターフェイスのメソッドにはいくつかのパラメーターがあります。 @RequestParam Annotationを使用して、要求されたパラメーターが何であるかを指定します。
(2)方法2
マルチパラメーターURLは、MAPを使用して構築することもできます。多くのターゲットURLパラメーターがある場合、この方法を使用して、feignインターフェイスの書き込みを簡素化できます。
@feignclient(name = "microservice-provider-user")public interface userfeignclient {@requestmapping(value = "/get"、method = requestmethod.get)public user get2(@requestmethe2 <string、object> map);}呼び出すとき、次のコードを使用できます。
パブリックユーザーget(string username、string password){hashmap <string、object> map = maps.newhashmap(); map.put( "id"、 "1"); map.put( "username"、 "Zhang San"); this.userfeignclient.get2(マップ);} POSTリクエストには、複数のパラメーターが含まれています
Feignを使用して複数のパラメーターを含むPOSTリクエストを作成する方法について説明しましょう。サービスプロバイダーのコントローラーがこのように書かれているとします。
@RestControllerPublic class usercontroller {@postmapping( "/post")public user post(@requestbodyユーザー){...}}feignをどのように使用してリクエストしますか?答えは非常に単純です、例:
@feignclient(name = "microservice-provider-user")public interface userfeignclient {@requestmapping(value = "/post"、method = requestmethod.post)public user post(@requestbody user user);}ヒント
(1)詳細については、この本の付随するコードで、Microservice-Provider-User-Multiple-Params ProjectおよびMicroservice-Consumer-Feign-Multiple-Paramsプロジェクトを参照してください。
(2)このセクションで説明した方法に加えて、独自のエンコーダーを作成してマルチパラメーターリクエストを作成することもできますが、この方法ではエンコードコストが高く、コードの再利用性が低くなります。したがって、この本は繰り返されません。
拡張された読書
(1)Pojoの問題を使用するためのパラメーター要求をFeignがサポートできることを願っています:https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2)Feign Native Annotations:https://github.com/spring-cloud/spring-cloud-netflix/issues/659を使用することが推奨される問題
(3)Feignの機能を強化することをお勧めします:https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4)オプションのリクエストボディをサポートすることをお勧めします(現在、feignはnullを投稿するときに例外を報告します):https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。