Der vorherige Artikel erläutert die Integration des Spring -Bootes mit JDBCTEMPLET, JPA und MyBatis, um Zugriff auf die Datenbank zu erhalten. Heute werde ich Ihnen hauptsächlich mit Ihnen teilen, wie Sie Daten über Spring Boot an das Front-End zurückgeben.
Im aktuellen Entwicklungsprozess bietet die Backend -Schnittstelle in der Regel nur Datenschnittstellen, um die Trennung der vorderen und hinteren Enden zu maximieren, und das Frontend erhält Daten vom Backend über AJAX -Anfragen und rendert sie an den Benutzer. Die häufigste Möglichkeit, wie wir verwenden, ist, dass das Backend eine JSON -String an den Frontend zurückgibt, und der Frontend analysiert die JSON -Zeichenfolge, um ein JavaScript -Objekt zu generieren und dann zu verarbeiten. Dieser Artikel zeigt, wie Spring Boot dieses Modell implementiert. Dieser Artikel konzentriert sich darauf, wie eine erholsame API entwirft und verwandte APIs über Spring Boot implementiert werden können. Damit jeder die API im erholsamen Stil besser verstehen kann, werden wir zunächst eine traditionelle Datenrückgabeoberfläche entwerfen, damit jeder sie im Vergleich verstehen kann.
Nehmen wir die Artikelliste als Beispiel, um eine Schnittstelle zu implementieren, die die Artikelliste zurückgibt. Der Code lautet wie folgt:
@Controller @RequestMapping ("/article") Public Class ArticleController {@autowired Private Artikelservice Artikelservice; @RequestMapping ("/list.json") @ResponseBody publiclist <Aktion> ListArticles (String -Titel, Integer pageSize, ganzzahliges pagenum) {if (pageSize == null) {pageSize = 10; } if (pagenum == null) {pagenum = 1; } int offset = (pagenum - 1) * pageSize; return articleService.getArticles (Titel, 1L, Offset, PageSize); }}Die Implementierung von ArticleService ist sehr einfach, was lediglich den Betrieb von Articlemapper zusammenfasst. Sie können sich auf den vorherigen Artikel beziehen. Die Implementierungsklasse von ArticleService lautet wie folgt:
@ServicePublic Class ArtikelserviceImpl implementiert Artikelservice {@autowired Private Articlemapper Articlemapper; @Override public Long Savearticle (@RequestBody Artikel Artikel) {return articlemapper.insertArticle (Artikel); } @Override publiclist <Aktion> getArticles (String -Titel, Long UserID, int offset, int pageSize) {article article = new article (); Artikel.Settitle (Titel); article.setUerId (userId); return articlemapper.queryArticlesBypage (Artikel, Offset, PageSize); } @Override public Artikel getbyId (Long id) {return articlemapper.querybyid (id); } @Override public void updatearticle (article article) {article.setUpDatetime (new Date ()); articlemapper.UpDATETLICLYBYID (Artikel); }}Führen Sie die Klasse application.java aus und besuchen Sie dann: http: // locahost: 8080/article/list.json finden Sie die folgenden Ergebnisse:
ArtikelserviceImpl ist eine sehr gewöhnliche Klasse mit nur einer Spring -Annotation @Service, die durch Spring -IOC -Container als Bohne für einfaches Management identifiziert wird. Schauen wir uns die ArticleController -Klasse an. Tatsächlich sollten diejenigen, die Spring MVC verwendet haben, mit diesen Anmerkungen vertraut sein. Hier ist eine kurze Erklärung:
@Controller identifiziert eine Klasse als Controller.
@RequestMapping URL -Mapping.
@ResponseBody gibt das Ergebnis in eine JSON -Zeichenfolge zurück.
@RequestBody bedeutet, JSON -Format -String -Parameter zu empfangen.
Durch diese drei Anmerkungen können wir die Funktion der Rückgabe von JSON-Formatdaten durch URLs problemlos implementieren. Aber jeder muss ein wenig verwirrt sein. Sind diese Dinge von Frühlings -MVC? Was hat es mit Spring Boot zu tun? Tatsächlich besteht die Funktion des Spring -Starts darin, uns den Konfigurationsprozess zu speichern. Andere Funktionen werden in der Tat von Spring und Spring MVC für uns bereitgestellt. Jeder sollte sich daran erinnern, dass Spring Boot uns automatische Konfigurationsdienste über verschiedene Starter bietet. Diese Abhängigkeit wurde zuvor in unserem Projekt eingeführt:
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Web </artifactid> </abhängig>
Dies ist ein JAR -Paket, das alle Spring -Boot -Webprojekte eingeführt werden müssen. Das heißt, solange Spring -Boot -Webprojekte standardmäßig die oben genannten Funktionen unterstützen. Hier finden wir weiter, dass die Entwicklung von Webentwicklung über Spring Boot uns viel Konfigurationsarbeiten spart.
Ok, schauen wir uns an, wie die erholsame API implementiert werden kann. In der Tat ist Pastful selbst keine tiefgreifende Technologie, sondern nur ein Programmierstil oder ein Designstil. Im traditionellen HTTP -Schnittstellendesign verwenden wir im Allgemeinen nur die GET- und Post -Methoden und dann das Vokabular, das wir selbst definieren, um unterschiedliche Operationen darzustellen. Zum Beispiel definieren wir die Schnittstelle zum Abfragen von Artikeln oben auf Artikel/List.json, um Abfragelisten zu repräsentieren, auf die über GET- oder Post -Methoden zugegriffen werden kann. Das Design von erholsamer API verwendet HTTP, um CRUD-bezogene Operationen darzustellen. Daher werden zusätzlich zu Get- und Post -Methoden auch andere HTTP -Methoden verwendet, wie z. B. Put, Löschen, Kopf usw., um Operationen mit unterschiedlichen Bedeutungen durch verschiedene HTTP -Methoden darzustellen. Unten finden Sie eine Reihe von erholsamen APIs, die von mir zum Hinzufügen, Löschen, Ändern und Überprüfen von Artikeln entworfen wurden:
| Schnittstellen -URL | HTTP -Methoden | Schnittstellenbeschreibung |
| /Artikel | POST | Speichern Sie den Artikel |
| /article/{id} | ERHALTEN | Abfrageartikelliste |
| /article/{id} | LÖSCHEN | Artikel löschen |
| /article/{id} | SETZEN | Artikelinformationen aktualisieren |
Hier ist zu sehen, dass die URL nur eine Möglichkeit ist, Ressourcen zu identifizieren, und das spezifische Verhalten wird durch die HTTP -Methode angegeben.
Schauen wir uns nun an, wie die obige Schnittstelle implementiert werden kann. Ich werde nicht viel darüber sagen, schauen Sie sich einfach den Code an:
@RastController @RequestMapping ("/rest") öffentliche Klasse ArticlerestController {@autowired private Artikelservice Artikelservice; @RequestMapping (value = "/article", method = post, produziert = "application/json") public webResponse <map <String, Objekt >> Savearticle (@RequestBody Artikel Artikel) {article.setUserid (1L); Artikelservice.Savearticle (Artikel); Karte <String, Object> ret = new HashMap <> (); ret.put ("id", article.getId ()); Webesponse <map <String, Objekt >> response = webesponse.getSuccessResponse (ret); Rücksendemantwort; } @RequestMapping (value = "/article/{id}", method = delete, produziert = "application/json") public webresponse <?> Deletearticle (@PathVariable Long id) {article article = artikelService.getById (id); Artikel.SetStatus (-1); Artikelservice.UpDATETICL (Artikel); Webesponse <elofthob> response = webesponse.getSuccessResponse (null); Rücksendemantwort; } @RequestMapPing (value = "/article/{id}", method = put, procies = "application/json") public webresponse <object> updatearticle (@PathVariable Long ID, @RequestBody Artikel Artikel) {article.setid (id); Artikelservice.UpDATETICL (Artikel); Webesponse <elofthob> response = webesponse.getSuccessResponse (null); Rücksendemantwort; } @RequestMapping (value = "/article/{id}", method = get, produces = "application/json") public webresponse <Actage> getArticle (@PathVariable Long id) {article article = artikelService.getById (id); Webresponse <Aktion> response = webesponse.getSuccessResponse (Artikel); Rücksendemantwort; }}Lassen Sie uns diesen Code erneut analysieren. Der Unterschied zwischen diesem Code und dem vorherigen Code ist:
(1) Wir verwenden die @restController -Annotation, nicht @Controller. Diese Annotation wird jedoch auch nicht von Spring Boot bereitgestellt, sondern eine Annotation im Spring MVC4, was auf einen Controller hinweist, der erholsam unterstützt.
(2) Es gibt drei URL -Karten in dieser Klasse, die gleich sind, dh alle /article /{id}, die in der von @Controller identifizierten Klasse nicht erscheinen dürfen. Hier können wir es mit Methode unterscheiden. Die Funktion von Erzeugnissen besteht darin, anzuzeigen, dass die Art des Rückkehrergebnisses JSON ist.
(3) Die Annotation @PathVariable wird auch von Spring MVC bereitgestellt. Seine Funktion besteht darin, anzuzeigen, dass der Wert der Variablen aus dem Zugriffspfad erhalten wird.
Dieser Code hat doch noch wenig mit Spring Boot zu tun. Spring Boot bietet nur automatische Konfigurationsfunktionen. Dies ist auch ein wichtiger Grund, warum Spring Boot sehr angenehm zu verwenden ist, da er sehr invasiv ist und Sie im Grunde keine Existenz spüren.
Wie testen Sie ihn nach Abschluss des Codes? Mit Ausnahme der GET -Methode können wir nicht direkt über den Browser darauf zugreifen. Natürlich können wir verschiedene HTTP -Anfragen direkt über Postbote senden. Ich unterstütze jedoch immer noch das Testen verschiedener Methoden durch Unit -Testklassen. Hier testen wir jede Methode über Junit:
@Runwith (SpringJunit4ClASSRunner.class) @springboottest (classes = application.class) öffentliche Klasse ArticleControllertest {@autowired Private ArticlerestController Restcontroller; Privat MockMVC MVC; @Before public void setup () löst Ausnahme aus {mvc = mockmvcbuilders.StandaloneSetup (restController) .build (); } @Test public void testaddarticle () löst Ausnahme aus {article article = neuer article (); Artikel.Settitle ("Testartikel0000000"); Artikel.SetType (1); Artikel.SetStatus (2); article.setSummary ("Dies ist ein Testartikel"); Gson goSn = new GSON (); RequestBuilder Builder = MockMVCRequestBuilders .post ("/rest/article") .Accept (mediateType.Application_json) .ContentType (mediateType.application_json_utf8) .Content (gosn.tojson (Artikel)); Mvcresult result = mvc.Perform (Builder) .AndReturn (); System.out.println (result.getResponse (). GetContentAsstring ()); } @Test public void testupdatearticle () löst Ausnahme aus {article article = neuer article (); Artikel.Settitle ("Testartikel aktualisieren"); Artikel.SetType (1); Artikel.SetStatus (2); article.setSummary ("Dies ist ein Aktualisierungstestartikel"); Gson goSn = new GSON (); RequestBuilder Builder = MockMVCRequestBuilders .Put ("/rest/article/1") .Accept (mediateType.Application_json) .ContentType (mediateType.application_json_utf8). Mvcresult result = mvc.Perform (Builder) .AndReturn (); } @Test public void testQueryArticle () löst Ausnahme aus {RequestBuilder Builder = MockMVCRequestBuilders .get ("/rest/article/1") .Accept (mediateType.application_json) .ContentType (minytype.application_json_utf8); Mvcresult result = mvc.Perform (Builder) .AndReturn (); System.out.println (result.getResponse (). GetContentAsstring ()); } @Test public void testDeletarticle () löst Ausnahme aus {RequestBuilder Builder = MockMVCRequestBuilders .Delete ("/rest/article/1") .Accept (mediateType.Application_json) .ContentType (mediateType.aplication_json_utf8); Mvcresult result = mvc.Perform (Builder) .AndReturn (); }}Ich werde die Ausführungsergebnisse hier nicht veröffentlichen. Wenn Sie interessiert sind, können Sie selbst damit experimentieren. In der gesamten Klasse gibt es noch sehr wenige Punkte zu erklären. Der Hauptgrund für diese Dinge ist, dass sie nichts mit Spring Boot zu tun haben. Der Grund für die Unterstützung dieser Operationen ist die Einführung des entsprechenden Starters im vorherigen Artikel:
<Depopentcy> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Test </artifactId> <Scope> Test </Scope> </abhängig>
Da HTTP -Anfragen ausgeführt werden sollen, wird MockMVC hier verwendet. ArticlerestController wird durch Injektion instanziiert und kann nicht direkt neu sein. Andernfalls kann ArticlerestController nicht durch Frühlings -IOC -Behälter verwaltet werden, daher können andere Klassen, von denen er abhängt, nicht normal injiziert werden. Durch MockMVC können wir HTTP -Lösch-/Put/Post und andere Methoden problemlos implementieren.
In diesem Artikel wird erläutert, dass die meisten Dinge von Spring- und Spring MVC bereitgestellt werden, wenn Spring Boot zur Implementierung einer erholsamen API verwendet wird, und Spring Boot liefert nur automatische Konfigurationsfunktionen. Diese automatische Konfiguration reduziert jedoch eine Menge Entwicklungs- und Wartungsarbeiten für uns, sodass wir ein Webprojekt einfacher und effizienter implementieren können, sodass wir uns mehr auf die Entwicklung des Geschäfts selbst konzentrieren können, ohne sich um den Rahmen zu kümmern. In diesem Artikel haben wir erwähnt, dass wir über Postman und JUNIT auf die erholsame Schnittstelle zugreifen können. Im nächsten Artikel werden wir einen weiteren Weg einführen, um darauf zuzugreifen. Wenn Sie interessiert sind, können Sie weiterhin darauf achten.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.