前の記事では、データベースへのアクセスを実現するために、Spring BootとJDBCtemplate、JPA、MyBatisの統合について説明します。今日、私は主にSpring Bootを介してフロントエンドにデータを返す方法をあなたと共有します。
現在の開発プロセスでは、フロントエンドとバックエンドの分離を最大化するために、バックエンドインターフェイスは通常、データインターフェイスのみを提供し、フロントエンドはAJAX要求を介してバックエンドからデータを取得し、ユーザーにレンダリングします。使用する最も一般的な方法は、バックエンドがJSON文字列をフロントエンドに戻し、フロントエンドがJSON文字列を解析してJavaScriptオブジェクトを生成してから処理することです。この記事では、Spring Bootがこのモデルをどのように実装するかを示します。この記事では、Restful APIを設計し、Spring Bootを介して関連するAPIを実装する方法に焦点を当てます。ただし、誰もがRestfulスタイルのAPIをよりよく理解するためには、最初に従来のデータリターンインターフェイスを設計して、誰もが比較してそれを理解できるようにします。
記事リストを例として、記事リストを返すインターフェイスを実装してみましょう。コードは次のとおりです。
@controller @requestmapping( "/article")パブリッククラスArticLecontroller {@autowired private reciptivice arvice artictervice; @RequestMapping( "/list.json")@responsebody public list <ports> listarticles(string title、integer pagesize、integer pagenum){if(pagesize == null){pagesize = 10; } if(pagenum == null){pagenum = 1; } int offset =(pagenum -1) * pagesize; return articlevice.getarticles(title、1l、offset、pageize); }}ArticLemapperの操作を単純にカプセル化するのは、ArticLemapperの操作をカプセル化するだけで非常に簡単です。前の記事を参照できます。記事サービスの実装クラスは次のとおりです。
@servicepublic class reciporserviceimpl explention reciontervice {@autowired private articlemapper articlemapper; @Override Public Long SaveArticle(@RequestBodyの記事){return articlemapper.insertarticle(記事); } @Override public List <portion> getArticles(文字列タイトル、long userid、int offset、int pagesize){article article = new article(); article.settitle(title); article.setuserid(userid); return articlemapper.queryarticlesbypage(記事、オフセット、ページサイズ); } @Override公開記事getByid(long id){return articlemapper.querybyid(id); } @Override public void updatearticle(記事記事){article.setupDateTime(new date()); articlemapper.updatearticlebyid(記事); }}application.javaクラスを実行してから、http:// locahost:8080/article/list.jsonにアクセスしてください。次の結果を確認できます。
recutionServiceImplは非常に普通のクラスであり、Spring IOCコンテナを介して簡単な管理のためのBeanとして識別されるSpring Annotation @Serviceは1つだけです。 ArticleControllerクラスを見てみましょう。実際、Spring MVCを使用した人は、これらの注釈に精通している必要があります。簡単な説明があります:
@Controllerクラスをコントローラーとして識別します。
@RequestMapping URLマッピング。
@ResponseBodyは、JSON文字列に変換された結果を返します。
@RequestBodyとは、JSON形式の文字列パラメーターを受信することを意味します。
これらの3つの注釈を通して、JSON形式のデータを返す機能をURLを介してフロントエンドに簡単に実装できます。しかし、誰もが少し混乱している必要があります。これらのことは春のMVCからですか? Spring Bootとは何の関係がありますか?実際、Spring Bootの関数は、構成プロセスを保存することです。他の機能は、実際に私たちのために春と春のMVCによって提供されます。 Spring Bootは、さまざまなスターターを通じて自動構成サービスを提供することを誰もが覚えておく必要があります。この依存関係は、以前にプロジェクトで導入されました。
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency>
これは、すべてのSpring Boot Webプロジェクトを導入する必要があるJARパッケージです。つまり、Spring Boot Webプロジェクトがデフォルトで上記の機能をサポートしている限りです。ここでは、Spring Bootを通じてWebエンジニアリングの開発により、多くの構成作業を節約することができます。
OK、RESTFUL APIの実装方法を見てみましょう。実際、Restful自体は深遠なテクノロジーではなく、単なるプログラミングスタイル、またはデザインスタイルです。従来のHTTPインターフェイス設計では、通常、GETメソッドとポストメソッドのみを使用し、語彙を使用して自分自身を定義して異なる操作を表します。たとえば、上記の記事を照会するためのインターフェイスでは、記事/list.jsonを定義して、Get MethodまたはPost Methodでアクセスできる記事リストのクエリを表します。 Restful APIの設計では、HTTPを使用してCRUD関連操作を表します。したがって、メソッドの取得と投稿に加えて、異なるHTTPメソッドを通じて異なる意味のある操作を表すために、Put、Delete、Headなど、他のHTTPメソッドも使用されます。以下は、記事を追加、削除、変更、チェックするために設計されたRESTFUL APIのセットです。
| インターフェイスURL | HTTPメソッド | インターフェイスの説明 |
| /記事 | 役職 | 記事を保存します |
| /article/{id} | 得る | クエリ記事リスト |
| /article/{id} | 消去 | 記事を削除します |
| /article/{id} | 置く | 記事情報を更新します |
ここでは、URLが単なるリソースを識別する方法であり、特定の動作はHTTPメソッドによって指定されていることがわかります。
次に、上記のインターフェイスを実装する方法を見てみましょう。私はそれについてあまり言いません、ただコードを見てください:
@retscontroller @requestmapping( "/ret")パブリッククラスarticlerestcontroller {@autowired private reciptionservice artiontervice; @RequestMapping(value = "/article"、method = post、produces = "application/json")public webresponse <map <string、object >> savearticle(@requestbody article){article.setuserid(1L); recutionervice.savearticle(記事); map <string、object> ret = new Hashmap <>(); Ret.put( "id"、article.getId()); webresponse <map <string、object >> response = webresponse.getsuccessResponse(ret);返信応答。 } @RequestMapping(value = "/article/{id}"、method = delete、produces = "application/json")public webresponse <? article.setstatus(-1); articleService.updateArticle(記事); webresponse <Object> response = webresponse.getSuccessResponse(null);返信応答。 } @RequestMapping(value = "/article/{id}"、method = put、produces = "application/json")public webresponse <object> updatearticle( @pathvariable long id、 @requestbody article){article.setid(id); articleService.updateArticle(記事); webresponse <Object> response = webresponse.getSuccessResponse(null);返信応答。 } @RequestMapping(value = "/article/{id}"、method = get、produces = "application/json")public webresponse <article> getarticle( @pathvariable long id){article article = articlevice.getByid(id); webresponse <ports> response = webresponse.getsuccessResponse(article);返信応答。 }}このコードをもう一度分析しましょう。このコードと前のコードの違いは次のとおりです。
(1)@controllerではなく、@restcontrollerアノテーションを使用しています。ただし、この注釈はスプリングブートによっても提供されるのではなく、スプリングMVC4で提供される注釈が提供されており、RESTFULをサポートするコントローラーを示しています。
(2)このクラスには同じ3つのURLマップがあります。つまり、@Controllerによって識別されたクラスに表示されることは許可されていません。ここでは、メソッドごとに区別できます。生成の機能は、リターン結果のタイプがJSONであることを示すことです。
(3)Annotation @PathVariableもSpring MVCによって提供されます。その機能は、変数の値がアクセスパスから取得されることを示すことです。
したがって、結局のところ、このコードはまだSpring Bootとはほとんど関係がありません。 Spring Bootは自動構成関数のみを提供します。これは、Spring Bootが非常に侵襲的であり、基本的にその存在を感じないため、Spring Bootが非常に快適に使用できる重要な理由でもあります。
コードが終了したら、それをテストする方法は? GETメソッドを除き、ブラウザを介して直接アクセスすることはできません。もちろん、Postmanを通じてさまざまなHTTPリクエストを直接送信できます。ただし、ユニットテストクラスを通じてさまざまな方法のテストをサポートしています。ここでは、Junitを介して各メソッドをテストします。
@runwith(springjunit4classrunner.class)@springboottest(classes = application.class)public class articlecontrollertest {@autowired private articlerestcontroller restcontroller; Private MockMVC MVC; @before public void setup()throws exception {mvc = mockmvcbuilders.standalonesetup(retscontroller).build(); } @test public void testAddarticle()スロー例外{記事記事= new article(); article.settitle( "test articlet0000000"); article.setType(1); article.setstatus(2); article.setsummary( "これはテスト記事です"); gson gosn = new gson(); RequestBuilder Builder = MockMVCRequestBuilders .Post( "/rest/article").accept(mediatype.application_json).contenttype(mediatype.application_json_utf8).content(gosn.tojson(article)); mvcresult result = mvc.perform(builder).andreturn(); system.out.println(result.getResponse()。getContentAsstring()); } @test public void testUpDateAurticle()スロー例外{記事記事= new article(); article.settitle( "テスト記事の更新"); article.setType(1); article.setstatus(2); article.setsummary( "これは更新テスト記事です"); gson gosn = new gson(); RequestBuilder Builder = MockMVCRequestBuilders .put( "/rest/article/1").accept(mediatype.application_json).contenttype(mediatype.application_json_utf8).content(gosn.tojson); mvcresult result = mvc.perform(builder).andreturn(); } @test public void testqueryarticle()スロー例外{requestbuilder builder = mockmvcrequestbuilders .get( "/rest/article/1").accept(mediatype.application_json).contenttype(mediatype.applicate_json_utf8); mvcresult result = mvc.perform(builder).andreturn(); system.out.println(result.getResponse()。getContentAsstring()); } @test public void testdeletearticle()スロー例外{requestbuilder builder = mockmvcrequestbuilders .delete( "/rest/article/1").accept(mediatype.application_json).contenttype(mediatype.applicate_json_utf8); mvcresult result = mvc.perform(builder).andreturn(); }}ここに実行結果は投稿しません。興味があれば、自分で実験することができます。クラス全体で説明するポイントはまだ非常に少ない。これらのことの主な理由は、スプリングブーツとは何の関係もないということです。これらの操作をサポートする理由は、前の記事で説明した対応するスターターを紹介するためです。
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <scope> test </scope> </dependency>
HTTPリクエストは実行されるため、MOCKMVCはここで使用されます。 ArticlerestControllerは注入によってインスタンス化され、直接新しくなることはできません。それ以外の場合、ArticlerestControllerはSpring IOCコンテナを介して管理できないため、依存する他のクラスを正常に注入することはできません。 MOCKMVCを介して、HTTP Delete/Put/Postおよびその他のメソッドを簡単に実装できます。
この記事では、Spring BootがRestful APIを実装するために使用された場合、ほとんどのものはSpringおよびSpring MVCによって提供され、Spring Bootは自動構成関数のみを提供することを説明しています。ただし、多くの開発とメンテナンスの作業を削減するのはこの自動構成であり、フレームワークを気にせずにビジネス自体の開発にもっと集中できるように、より簡単かつ効率的にWebプロジェクトを実装できるようになります。この記事では、PostmanとJunitを介してRestfulインターフェイスにアクセスできると述べました。次の記事では、アクセスする別の方法を紹介します。興味があれば、注意を払い続けることができます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。