L'article précédent explique l'intégration de Spring Boot avec JDBCTemplate, JPA et MyBatis pour obtenir l'accès à la base de données. Aujourd'hui, je partagerai principalement avec vous comment retourner les données à la fin de la botte de printemps.
Dans le processus de développement actuel, afin de maximiser la séparation des extrémités avant et arrière, l'interface backend fournit généralement uniquement des interfaces de données, et le frontal obtient les données du backend via les demandes AJAX et les rend à l'utilisateur. La façon la plus courante que nous utilisons est que le backend renverra une chaîne JSON sur le frontend, et le frontend analyse la chaîne JSON pour générer un objet JavaScript, puis le traiter. Cet article montrera comment Spring Boot implémente ce modèle. Cet article se concentrera sur la façon de concevoir une API RESTful et d'implémenter des API associées via Spring Boot. Cependant, pour que tout le monde comprenne mieux l'API de style RESTful, nous concevons d'abord une interface de retour de données traditionnelle afin que tout le monde puisse les comprendre en comparaison.
Prenons la liste des articles comme exemple pour implémenter une interface qui renvoie la liste des articles, le code est le suivant:
@ Contrôleur @ requestmapping ("/ article") classe publique ArticleController {@Autowired Private ArticleService ArticleService; @RequestMapping ("/ list.json") @ResponseBody Public List <ReTar> Listarticles (Title de chaîne, entier PageSize, PageNum entier) {if (pagesize == null) {pageSize = 10; } if (pagenum == null) {pagenum = 1; } int offset = (pagenum - 1) * pagesize; Retour ArticleService.getarticles (titre, 1L, Offset, PageSize); }}La mise en œuvre de l'article Service est très simple, ce qui résume simplement le fonctionnement de l'articlemapper. Vous pouvez vous référer à l'article précédent. La classe de mise en œuvre du service d'articles est la suivante:
@ServicePublic Class ArticleServiceIMPL implémente ImptoseService {@Autowired Private Articlemapper Articlemapper; @Override public long Savearticule (@Requestbody Article Article) {return articlemapper.insertarticle (article); } @Override Public List <Reate> GetArticles (Titre de la chaîne, Long UserId, int offset, int pagesize) {Article Article = NOUVEAU Article (); Article.setTitle (titre); Article.SetUserId (userId); return ArticleMapper.QueryarticlesByPage (article, offset, pagesize); } @Override Article public getbyid (Long ID) {return articleMatper.QueryByid (id); } @Override public void updateAralicle (Article Article) {Article.SetUpDateTime (new Date ()); Articlemapper.UpdateAralileByid (article); }}Exécutez la classe Application.java, puis visitez: http: // locahost: 8080 / article / list.json, vous pouvez voir les résultats suivants:
ArticleServiceImpl est une classe très ordinaire, avec une seule annotation de printemps @Service, identifiée comme un haricot pour une gestion facile à travers des conteneurs Spring IOC. Jetons un coup d'œil à la classe AticleController. En fait, ceux qui ont utilisé le Spring MVC devraient être familiers avec ces annotations. Voici une brève explication:
@Controller identifie une classe en tant que contrôleur.
@Requestmapping URL Mapping.
@ResponseBody renvoie le résultat converti en une chaîne JSON.
@Requestbody signifie recevoir des paramètres de chaîne de format JSON.
Grâce à ces trois annotations, nous pouvons facilement implémenter la fonction de renvoyer des données de format JSON à l'URL frontal via les URL. Mais tout le monde doit être un peu confus. Sont-ils des choses de Spring MVC? Qu'est-ce que cela a à faire avec Spring Boot? En fait, la fonction de Spring Boot est de nous sauver le processus de configuration. D'autres fonctions sont en effet fournies par le printemps et le printemps MVC pour nous. Tout le monde doit se rappeler que Spring Boot nous fournit des services de configuration automatique via divers démarreurs. Cette dépendance a été introduite dans notre projet avant:
<dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> printemp-boot-starter-web </etefactId> </Dependency>
Il s'agit d'un package JAR que tous les projets Web de démarrage Spring doivent être introduits. C'est-à-dire, tant que les projets Web Spring Boot prennent en charge les fonctions ci-dessus par défaut. Ici, nous constatons en outre que le développement de l'ingénierie Web via Spring Boot nous évite beaucoup de travail de configuration.
Ok, jetons un coup d'œil à la mise en œuvre de l'API RESTFul. En fait, Restful lui-même n'est pas une technologie profonde, mais juste un style de programmation ou un style de conception. Dans la conception traditionnelle de l'interface HTTP, nous utilisons généralement uniquement les méthodes GET et POST, puis utilisons le vocabulaire que nous nous définissons pour représenter différentes opérations. Par exemple, l'interface pour interroger les articles ci-dessus, nous définissons l'article / list.json pour représenter les listes d'articles de requête, accessibles via des méthodes GET ou POST. La conception de l'API RESTful utilise HTTP pour représenter les opérations liées à CRUD. Par conséquent, en plus d'obtenir et de poster des méthodes, d'autres méthodes HTTP sont également utilisées, telles que put, supprimer, tête, etc., pour représenter les opérations avec différentes significations grâce à différentes méthodes HTTP. Vous trouverez ci-dessous un ensemble d'API RESTful conçu par moi pour ajouter, supprimer, modifier et vérifier les articles:
| URL d'interface | Méthodes HTTP | Description de l'interface |
| /article | POSTE | Sauver l'article |
| / Article / {id} | OBTENIR | Liste d'articles de requête |
| / Article / {id} | SUPPRIMER | Supprimer les articles |
| / Article / {id} | METTRE | Mettre à jour les informations de l'article |
On peut voir ici que l'URL n'est qu'un moyen d'identifier les ressources, et le comportement spécifique est spécifié par la méthode HTTP.
Voyons maintenant comment implémenter l'interface ci-dessus. Je n'en dirai pas grand-chose, il suffit de regarder le code:
@ RestController @ requestmapping ("/ rest") classe publique ArticlerestController {@Autowired Private ArticleService ArticleService; @RequestMapping (value = "/ article", méthode = post, produit = "application / json") public webResponse <map <string, object >> savearticle (@requestbody article article) {article.SetUserId (1L); ArticleService.Savearticule (article); Map <string, objet> ret = new Hashmap <> (); ret.put ("id", article.getId ()); WeBResponse <map <string, objet >> réponse = weBResponse.getSuccessResponse (ret); réponse de retour; } @RequestMapping (value = "/ article / {id}", méthode = delete, produit = "application / json") public webrePonse <?> Deletearticle (@pathvariable long id) {article article = ArticleService.getById (id); Article.SetStatus (-1); ArticleService.UpdateAralicle (article); WeBResponse <Bject> Response = weBResponse.getSuccessResponse (null); réponse de retour; } @RequestMapping (value = "/ article / {id}", méthode = put, produmes = "application / json") public webResponse <objet> updateArticle (@Pathvariable Long ID, @Requestbody Article Article) {Article.SetId (id); ArticleService.UpdateAralicle (article); WeBResponse <Bject> Response = weBResponse.getSuccessResponse (null); réponse de retour; } @RequestMapping (value = "/ article / {id}", méthode = get, produmes = "application / json") public webResponse <Reate> getArticle (@Pathvariable long id) {Article Article = ArticleService.getById (id); WeBResponse <Reate> Response = weBResponse.getSuccessResponse (article); réponse de retour; }}Analysons à nouveau ce code. La différence entre ce code et le code précédent est:
(1) Nous utilisons l'annotation @RestController, pas @Controller. Cependant, cette annotation n'est pas non plus fournie par Spring Boot, mais une annotation fournie dans Spring MVC4, indiquant un contrôleur qui prend en charge Restful.
(2) Il existe trois cartes URL dans cette classe qui sont les mêmes, c'est-à-dire qu'ils sont tous / Article / {id}, qui n'est pas autorisé à apparaître dans la classe identifiée par @Controller. Ici, nous pouvons le distinguer par la méthode. La fonction des produits est d'indiquer que le type de résultat de retour est JSON.
(3) L'annotation @pathvariable est également fournie par Spring MVC. Sa fonction est d'indiquer que la valeur de la variable est obtenue à partir du chemin d'accès.
Donc, après tout, ce code n'a encore que peu à voir avec Spring Boot. Spring Boot fournit uniquement des fonctions de configuration automatique, ce qui est également une raison importante pour laquelle Spring Boot est très confortable à utiliser, car il est très invasif et vous ne ressentez essentiellement pas son existence.
Une fois le code terminé, comment le tester? À l'exception de la méthode GET, nous ne pouvons pas y accéder directement via le navigateur. Bien sûr, nous pouvons envoyer directement diverses demandes HTTP via Postman. Cependant, je prends toujours en charge le test de diverses méthodes par le biais de classes de test unitaires. Ici, nous testerons chaque méthode via Junit:
@Runwith (springjunit4classrunner.class) @springboottest (classes = application.class) public class publicleControllerSt {@Autowired Private ArticlerestController restController; Private MockMVC MVC; @Before public void setup () lève une exception {mvc = mockmvcbuilders.standalonesEtup (restController) .build (); } @Test public void testAdDarticle () lève une exception {article Article = nouvel article (); Article.SetTitle ("Test Article0000000"); Article.setType (1); Article.SetStatus (2); Article.Setsummary ("Ceci est un article de test"); Gson gosn = new gson (); RequestBuilder Builder = MockmvCrequestBuilders .Post ("/ rest / article") .Accept (mediaType.Application_Json) .ContentType (mediaType.Application_Json_Utf8) .Content (GOSN.Tojson (article)); MVCRESULT Résultat = Mvc.Perform (Builder) .Andreturn (); System.out.println (result.getResponse (). GetContentString ()); } @Test public void TestupDateAralicle () lève une exception {Article Article = nouvel article (); Article.SetTitle ("Mettre à jour l'article de test"); Article.setType (1); Article.SetStatus (2); Article.SetSummary ("Ceci est un article de test de mise à jour"); Gson gosn = new gson (); RequestBuilder builder = mockmvcrequestBuilders .put ("/ rest / article / 1") .Accept (mediaType.Application_Json) .ContentType (mediaType.Application_Json_Utf8) .Content (GOSN.Tojson (article)); MVCRESULT Résultat = Mvc.Perform (Builder) .Andreturn (); } @Test public void testQueryArticle () lève une exception {requestBuilder builder = mockmvcrequestBuilders .get ("/ rest / article / 1") .Accept (mediaType.Application_Json) .ContentType (MediaType.Application_JSON_UTF8); MVCRESULT Résultat = Mvc.Perform (Builder) .Andreturn (); System.out.println (result.getResponse (). GetContentString ()); } @Test public void testdeletetereticle () lève une exception {requestBuilder builder = mockmvcrequestBuilders .Delete ("/ rest / article / 1") .Accept (mediaType.Application_UTF8); MVCRESULT Résultat = Mvc.Perform (Builder) .Andreturn (); }}Je ne publierai pas les résultats d'exécution ici. Si vous êtes intéressé, vous pouvez l'expérimenter vous-même. Il y a encore très peu de points à expliquer dans toute la classe. La raison principale de ces choses est qu'ils n'ont rien à voir avec Spring Boot. La raison de la prise en charge de ces opérations est de présenter le démarreur correspondant mentionné dans l'article précédent:
<dependency> <proupId> org.springframework.boot </prôdId> <ArtifactId> printemp-boot-starter-test </retifactid> <ccope> test </ccope> </Dependency>
Étant donné que les demandes HTTP doivent être exécutées, MockMVC est utilisé ici. Le Contrôle Activlerest est instancié par injection et ne peut pas être directement nouveau. Sinon, les acteurs d'Orticlerest Controller ne peuvent pas être gérés via des conteneurs Spring IOC, de sorte que d'autres classes dont elle dépend ne peuvent pas être injectées normalement. Grâce à MockMVC, nous pouvons facilement implémenter HTTP Delete / Put / Post et d'autres méthodes.
Cet article explique que si Spring Boot est utilisé pour implémenter l'API RESTful, la plupart des choses sont fournies par Spring and Spring MVC, et Spring Boot fournit uniquement des fonctions de configuration automatique. Cependant, c'est cette configuration automatique qui réduit beaucoup de travaux de développement et de maintenance pour nous, ce qui nous permet de mettre en œuvre un projet Web plus simplement et efficacement, afin que nous puissions nous concentrer davantage sur le développement de l'entreprise elle-même sans nous soucier du cadre. Dans cet article, nous avons mentionné que nous pouvons accéder à l'interface Restful via Postman et Junit. Dans le prochain article, nous présenterons une autre façon d'y accéder. Si vous êtes intéressé, vous pouvez continuer à faire attention.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.