前に書いてください
この記事は、マークダウン形式で書かれています。私がこれを書いたのは初めてです。レイアウトは少し厄介かもしれません。あなたがそれを許すことができることを願っています。
主に、リボンを使用して安らかなリクエストを行い、さまざまな方法の使用をテストします。コードは比較的冗長であり、初心者に適しているので、私はそれに噴出を与えることを心に留めています。ありがとう。
前提
注:この記事では、Spring-Boot-Starter-Parentバージョンを1.5.9. Realease以上にアップグレードする必要があります(1.3.7.Releaseバージョンにはこれらの注釈がありません)
提案:各マイクロサービスアプリケーションには、独自のSpring-Boot-Maven-PluginとMaven-Compiler-Pluginがあり、JDKコンパイルされたバージョンが1.8であることを指定します。仕様方法は次のとおりです。pom.xmlに追加します
<build> <plugins> <plugin> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> </plugin> <plugin> <groupid> org.apache.maven.plugins </groupid> maven-compuration-plugin </artifactid> <source> 1.8 </source> <target> 1.8 </target> </configuration> </plugin> </plugins> </build>
テストプロジェクトの構築
eureka登録センター:参照登録センター設立サービスプロバイダー:リファレンス登録サービスプロバイダー
リボン消費者:参照サービスの発見と消費
プロジェクトが構築されたら、これらのチュートリアルに記載されている構成ホストファイルに従うことを忘れないでください。
プロジェクトのリクエストマッピングが同じになるのを防ぐために、すべてのコントローラークラス(サービスプロバイダーと消費者)を削除します。次に、すべての人が見ることができるように、各安らかな方法をクラスにカプセル化します
リクエストを取得します
GetForentity:この方法には3つの過負荷フォームがあります。
注:このメソッドは、ラッパーオブジェクトのresponseNtity <T>を返します。ここで、tはタイプで渡された応答タイプです。リターンタイプを取得する場合は、このラッパーオブジェクトのgetBody()メソッドを使用する必要があります。
GetForObject:この方法には、3つの過負荷フォームもあります。これは、getForentityメソッドと同じです。
注:この方法で返されるオブジェクトタイプは、タイプで渡された応答タイプです
テストの便利さのために、テストの利便性のために、それぞれサービスプロバイダーとサービス消費者に同じユーザークラスが提供されます
パッケージcom.cnblogs.hellxz;/** *テスト用のpojo */public class user {private string name;プライベートストリングセックス;プライベート文字列電話; public user(){} public user(string name、string sex、string phone){this.name = name; this.sex = sex; this.phone = phone; } public string toString(){return "user:{" + "name:" + name + "、" + "sex:" + sex + "、" + "phone:" + phone + "}"; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getSex(){return sex; } public void setSex(string sex){this.sex = sex; } public string getPhone(){return phone; } public void setPhone(string phone){this.phone = phone; }}以下に、サービスプロバイダーでgetRequestControllerを作成します
パッケージcom.cnblogs.hellxz; Import org.apache.log4j.logger; Import org.springframework.beans.factory.annotation.autowired; import org.springframework.cloud.client.client.serviceinstance; import org.springframeworkient; cloud.clud.client.discover.discoverient; org.springframework.web.bind.annotation。*;/*** @author:hellxz* @description:service provider* @date:2018/4/18 11:36*/ @stapcontrollollerpublic class getRequestController {@Autowired Prival Discolient Client; //ディスカバリークライアントプライベートファイナルロガーロガー= logger.getLogger(getRequestController.class); /** *ストレートテストに移動 */@getMapping(value = "/hello")public string hello(){//サービスインスタンスを取得すると、機能はコンソールの後のserviceinstance intance intance = client.getLocalserviceInstance()の効果を表示することです。 logger.info( "/hello host:"+serviceinstance.gethost()+"service_id:"+serviceinstance.getServiceid()); 「こんにちは」を返します。 }/** * parameter test */@getMapping(value = "/greet/{dd}")public string greet( @pathvariable string dd){serviceinstance serviceInstance = client.getLocalserviceInstance(); logger.info( "/hello host:"+serviceinstance.gethost()+"service_id:"+serviceinstance.getServiceid()); 「hello」+ddを返します。 }/***テストオブジェクトを返します*/@getMapping( "/user")public user getUser(){serversInstance serviceInstance = client.getLocalserviceInstance(); logger.info( "/user"+serviceInstance.gethost()+"port:"+serviceinstance.get.getport()+"serviceinstanceId:"+serviceinstance.getServiceid()); return newユーザー( "Hellxz"、 "MALE"、 "123456789"); }/***名前に従ってオブジェクトを返し、データベース検索操作はここでシミュレートされます*/@getMapping( "/user/{name}")public user getUserSelect( @pathvariable string name){serviceinstance inversstance = client.getLocalserviceInstance(); logger.info( "/user"+serviceInstance.gethost()+"port:"+serviceinstance.get.getport()+"serviceinstanceId:"+serviceinstance.getServiceid()); if(name.isempty()){return new user(); } else if(name.equals( "hellxz")){return new user( "hellxz"、 "male"、 "123456789"); } else {return new user( "random user"、 "male"、 "987654321"); }}}次に、サービスコンシューマープロジェクトでgetRequestControllerを作成します
パッケージcom.cnblogs.hellxz; Import org.apache.log4j.logger; Import org.springframework.beans.factory.annotation.autowired; import org.springframework.http.responseentity; Import org.springframework.web.bind.annotation。*; org.springframework.web.client.resttemplate; import org.springframework.web.util.uricomponents; Import org.springframework.web.util.uricomponentsbuilder; Import java.net.uri; Import Java.util.util.util.util.util.util.util.util.util. hellxz * @description:リボン消費者アプリケーションコントローラー、Get request * @date:2018/4/16 15:54 */ @restcontrollerpublic class getRequestController {private logger.getLogger(getRequestController.class); @autowired // Inject ResttemplateプライベートレイトテンプレートRESTTEMPLATE; /*** * responseNtity <T> getForentity(string url、class <t> responsetype) * t getBody()getBody()getBody()次の方法は同じです */@getMapping(value = "/entity/noparam")public string noparamgetforentity(){//ここでコメントしました。報告される// return rettemplate.getForentity( "http:// localhost:8080/hello"、string.class).getbody(); // RESTTEMPLATEを使用してMicroServiceインターフェイスを呼び出しますRestTemplate.getForentity( "http:// hello-service/hello"、string.class).getbody(); }/** * responseNtity <t> getForentity(String URL、class <t> responsetype、object ... urivariables) */@getMapping( "/entity/type")public user getForentityIdentidefyByType(){//パラメーター応答性を通過せずに指定されたタイプの結果を返す<ユーザー=ユーザー=ユーザー=ユーザー=ユーザーRESTTEMPLATE.GETFORENTITY( "http:// hello-service/user"、user.class); user body = entity.getBody(); logger.info( "user:"+body);体を返す; //上記は// resttemplate.getforentityを返すことができます( "http:// hello-service/user"、user.class).getbody(); }/** * responseNtity <T> getForentity(String URL、class <t> responseType、object ... urivariables) *プレースホルダーを使用してパラメーターを置き換え、string.formatメソッドを使用して */@getMapping(value = "/entity")//もしそうなら、 @pathvariableを使用してください。そうでなければ@RequestParamパブリック文字列getForentyByQuestionMarkParam(@RequestParam( "name")String name){//メインテストGetEntityメソッド、ここでテストはパラメーターRESTTEMPLATE.GETFORENTITY( "http:// hello-service/great/{1)")を直接継続します。 }/*** getForentityメソッドは内部的にマップを抽出し、プレースホルダーキーの値はパラメーターとしてURLにバックフィルされます。それ以外の場合は、@RequestParam Public String getForentityByMap( @pathvariable( "name")String name){//メインテストGetEntityメソッドを使用します。 reqmap.put( "name"、name); RESTTEMPLATE.GETFORENTITY( "http:// hello-service/greet/{name}"、string.class、reqmap).getbody(); }/** * responseNtity <T> getForObject(uri url、class <t> responsetype) */@getmapping( "/entity/uri")public string getForentityByuri(){// URIを使用して引数を渡し、uricomponents uricomponents =アクセスuricomponentsBuilder.FromUristring( "http:// hello-service/greet/{name}").build()。expand( "laozhang").encode(); uri uri = uricomponents.touri(); RESTTEMPLATE.GETFORENTITY(uri、string.class).getbody()を返します。 }/** * t getForObject(string url、class <t> responseType) */@getMapping( "/object")public user getForObjectWithNoparam(){// getForentityメソッドと比較して、GetBodyを省略することができます。 }/** * t getForObject(string url、class <t> responseType、map <string、?> urivariables) */@getmapping( "/object/map")public user getforobjecbyMap(){//パラメーターマップを使用してマップを使用して<文字列>パリマップ>パリマップ= new Hashmap <>(); parammap.put( "name"、 "hellxz"); RESTTEMPLATE.getForObject( "http:// hello-service/user"、user.class、parammap)を返します。 }/** * t getForObject(string url、class <t> responseType、object ... urivariables) */@getMapping( "/object/param/{name/{name}")パブリックユーザーgetForObjedByparam( @pathvariable name){return rettemplate.getforobject(http:// hello-service/user/user/user/user/user/user/ユーザー/ユーザー/ユーザー/ユーザー/ユーザー/ユーザー/ }/** * t getForObject(uri url、class <t> responsetype) */@getmapping( "/object/uri/{name}")public user getforobjectbyuri( @pathvariable string name){uricomponents uricomponents = uricomponentsbuilder.fromiristring({htp: "htp:/fulsevice .build()。expand(name).encode(); uri uri = uricomponents.touri(); RESTTEMPLATE.getForObject(uri、user.class)を返します。 }}最初に登録センターを開始し、消費者が提供するインターフェイスにアクセスしてテストします。これらはすべて実際に私によって運営されているので、ここでテストを書くことはありません。
リクエストを投稿します
POSTリクエストとGet Requestの両方に *前兆と *forobjectメソッドがあり、パラメーターリストが多少異なります。これらの2つの方法に加えて、ポストロケーションがリソースをPOSTリクエストとして提出し、新しいリソースのURIを返すforlocation forlocationメソッドもあります。
事後:この方法には3つの過負荷形式があります。
注:このメソッドは、ラッパーオブジェクトのresponseNtity <T>を返します。ここで、tはタイプで渡された応答タイプです。リターンタイプを取得する場合は、このラッパーオブジェクトのgetBody()メソッドを使用する必要があります。
PostForObject:この方法には3つの過負荷フォームもあります。これは、Postforentityメソッドと同じです。
注:この方法で返されるオブジェクトタイプは、タイプで渡された応答タイプです
ポストロケーション:この方法には、3つの過負荷フォームもあります。
注:この方法は、新しいリソースのURIを返します。 GetForentity、GetForObject、PostForentity、およびPostForObjectメソッドの違いは、戻りタイプがURIであるため、このメソッドで返品タイプを指定する必要がないことです。それでも、プレースホルダーがオブジェクトを介して引数を渡す必要があります... urivariables、map <string、?> urivariables。コードのポストフォレンティティ部分を参照してください。
以前の方法では、サービスプロバイダーと消費者をそれぞれ提供するプロジェクトで、それぞれポストエクセストコントローラーを作成しました。
次のサービスPOSTREQUESTCONTROLLERコードは次のとおりです。
パッケージcom.shunneng.springcloudhelloworld; Import org.apache.log4j.logger; import org.springframework.web.bind.annotation。*; import org.springframework.web.util.uricomponents; Import org.urg.springframework.urg.uryomponentsBuilder java.net.uri;/** * @author:hellxz * @description: * @date:2018/4/18 10:21 */ @ @restcontrollerpublic class postrequestcontroller {private logger logger = logger.getLogger(PosttreabestController.Class); /***オブジェクトを受信して返します。 postforentity/postforobjectメソッドは一般*/@postmapping( "/user")public user returnuserbypost(@requestbodyユーザー){logger.info( "/use interface"+user); if(user == null)新しいユーザーを返します( "これは空のオブジェクト"、 ""、 "");ユーザーを返します。 }/** * Postforentityメソッドのパラメーターをテストすると、出力を直接判断できます */@postmapping( "/user/{str}")public user returnuserbypost( @pathvariable string str、 @requestbody user user){logger.info( "/user/user/usparam interface namet if(user == null)新しいユーザーを返します( "これは空のオブジェクト"、 ""、 "");ユーザーを返します。 }/** * forlocation methods( "/location")public uri retrenturi(@requestbody user user){// urlをここでシミュレートする場合、ここでuricomponents uricomponents = uricomponentsbuilder.fromuristring( " .build()。expand(user).encode(); uri touri = uricomponents.touri(); //ここに問題が何であるかわかりません。明らかに生成されますが、logger.info( "/location uri:"+touri)のようです。トゥーリを返す; }}コンシューマポストレートコントローラーコード:
パッケージcom.cnblogs.hellxz; Import org.apache.log4j.logger; Import org.springframework.beans.factory.annotation.autowired; import org.springframework.http.responseentity; import org.springframework.web.bind.annotation.Entation. -postmaping; org.springframework.bind.annotation.restController; Import org.springframework.web.client.resttemplate; Import org.springframework.util.uricomponents; Import org.springframework.util.uriconentbuilder; @author:hellxz * @description:リボンコンシューマーポストリクエストコントローラー * @date:2018/4/18 9:47 */ @restcontrollerpublic class postrequestcontroller {private logger logger = logger.getLogger(postreestcontroller.class); @autowired privateRestemplateStemplate; /** * responseNtity <t> postforentity(string url、object request、class <t> responsetype) *パラメーターURLは言及されていません。オブジェクト要求がhttpentityオブジェクトでない場合、自動的にhttpentityオブジェクトに変換され、完全なボディとして扱われます。 * HTTPentityオブジェクトの場合、ボディとして直接処理され、ヘッダーコンテンツが含まれます。 *以下の書き換え方法については話しません。使用方法は、GetForentityとほぼ同じです。単純なPOSTオブジェクトの場合は、オブジェクトのないメソッド...変数またはマップ変数を使用します。 * POSTORENTITY(String URL、Object Request、class <t> responsetype、object ... urivariables) * postforentity(string url、object request、class <t> responsetype、map <string、?> urivariables) * *ここで、私は私が遭遇した落とし穴について詳しく説明します: * 1。言うまでもなく、プレースホルダーを使用して、ポストで要求されたURLのパラメーターを渡します。URLでプレースホルダーが使用されない場合、これらの最後の合格パラメーターは無効です! * 2。メソッドのオブジェクト要求オブジェクトがサービスプロバイダーの受信パラメーターと同じタイプの場合、サービスプロバイダーは@RequestBodyを使用してパラメーターを受信するだけです。 * 3。両方が使用されている場合、これはもっと興味深いものです。 @pathvariable annotationを介してURIでパラメーターを受信する必要があります。また、フィールドに応じてパラメーターを受信するオブジェクトを受信するか、リクエストパラムを受信するために@RequestBodyが必要です。 * 4.エラーを報告する場合は、上記の3つの項目を詳しく見て、サービスプロバイダーのパラメーターと注釈の使用に注意してください。 */ @postmapping( "/ entity")public user postforentity(){user user = new user( "hellxz1"、 "1"、 "678912345"); ResponseNtity <user> entity = RESTTEMPLATE.POSTFORENTITY( "http:// hello-service/user/{str}"、user、user.class、 "test parameters"); user body = entity.getBody(); //すべてのRESTTEMPLATE。 }/***パラメーターの渡しURIで、テスト結果はサービスプロバイダーの端末に表示されます* ResponseTentity <t> postforentity(uri url、object request、class <t> responsetype)*/@postmapping( "/entity/uri")パブリックユーザーpostforentitybyuri(){user user = newユーザー(lao(lao Zhang "、" 1 "、" 678912345 "); //ここでURLをURIに変換するだけで、パラメーターが追加されていませんuricomponents uricomomponents = uricomponentsbuilder.fromuristring( "http:// hello-service/user").build()。encode()。 uri touri = uricomponents.touri(); //ユーザーを使用してパラメーターを渡すユーザーオブジェクト= rettemplate.postforobject(Touri、user、user.class);オブジェクトを返します。 } /***ここでポストフォーオブジェクトメソッドをテストする場合、注意が必要なパラメーターは、上記の方法で説明されているとおりです。違いはあなたがgetBodyを必要としないので、ここで詳しく説明しません * postforObject(string url、object request、class <t> responsetype、object ... urivariables) @postmapping( "/object")public user postforobject(){user user = new user( "hellxz2"、 "1"、 "123654987"); //ここでURLは1を通過してサーバープロジェクトのインターフェイスを呼び出しますusersbodybody = rettemplate.postforobject( "http:// hello-service/user/1"、user、user.class); RESONSEBODY; } /***別のタイプのPOSTリクエストがあります:ポストロケーション。ここには3つの過負荷もあります。リターンタイプを指定しないことに加えて、使用法は同じであり、リターンタイプはすべてURIであるため、私はそれを説明しません * postforlocation(string url、object request、object ... urivariables) * postforlocation(string url、object request、map <string、?> urivarables) * postforcolocation(uri url、object request)新しいユーザー( "Hellxz3"、 "1"、 "987654321"); uri uri = resttemplate.postforlocation( "http:// hello-service/location"、user); //なぜそれが空いているのかわかりません。この方法は参照用です。状況が何であるかがわかっている場合は、logger.info( "/location uri:"+uri)を変更するために戻ってきます。 uriを返します。 }}リクエスト&&削除リクエスト
PUTリクエストは、GETおよびPOSTリクエストメソッドよりも簡単です。プットリクエストの返品タイプを指定する必要はありません。もちろん、返品値はありません。また、3種類の過負荷であり、基本的に以前に書かれたものと同じです。ここでもっと言いたくありません。削除要求とPUTリクエストの両方に返品値はありません。ここに具体的に書くかどうかは関係ありません。これら2つのリクエストの方法は別々にリストされています。コードはクラスで記述されています。
PUTリクエスト方法は次のとおりです。
削除要求方法は次のとおりです。
PutandDeleterequestControllerをプロバイダープロジェクトに追加すると、コードは次のとおりです
パッケージcom.cnblogs.hellxz; Import org.apache.log4j.logger; Import org.springframework.web.bind.annotation。 putanddeleterequestcontroller {private logger logger = logger.getLogger(putanddeleterequestcontroller.class); @putmapping( "/put")public void put(@requestbody user user){logger.info( "/put"+user); } @deletemapping( "/delete/{id}")public void delete( @pathvariable long id){logger.info( "/delete id:"+id); }}PutandDeleterequestControllerをプロバイダープロジェクトに追加すると、コードは次のとおりです
パッケージcom.cnblogs.hellxz; import org.apache.log4j.logger; Import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation。 @description:リクエストを入力し、リクエストを削除し、過負荷パラメーターは基本的に上記のデモと同じであり、リストされていません * @date:2018/4/19 13:43 */ @restcontrollerpublic class putrequestcontroller {private logger logger = logger.getlogger(postrequestcontroller.class); @autowired privateRestemplateStemplate; /***リクエストの例、通常、リクエストはほとんど修正として使用されます*/@putmapping( "/put")public void put(@requestbodyユーザーユーザー){repttemplate.put( "http:// hello-service/put"、user); }/***削除リクエストの例*/@deletemapping( "/del/{id}")public void delete( @pathvariable long id){resttemplate.delete( "http:// hello-service/delete/{1}"、id); }}結論
このブログ投稿は、Markdownを使用して書かれています。シリアル番号を追加し、コード関数を初めてコードブロックに折りたたむ方法がわかりません。これは良い記事ではないかもしれませんが、私はこのブログ投稿をほぼ2日間書いています。良い提案がある場合は、お気軽にコメントして交換してください。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。