RESTemplate est un client fourni par Spring pour accéder aux services REST. RestTemplate offre une variété de moyens pratiques d'accéder aux services HTTP distants, ce qui peut considérablement améliorer l'efficacité de l'écriture du client. Dans le blog précédent, //www.vevb.com/article/132885.htm, le client de Jersey a été utilisé pour implémenter le service Restful qui consomme Spring Boot. Ensuite, nous utilisons RestTemplate pour consommer le service Restful dans l'exemple précédent. L'exemple précédent:
Springboot intègre la base de données de mémoire H2 pour obtenir des tests unitaires et une non-pertinence
Les services Restful fournis par cet exemple sont les suivants: http: // localhost: 7900 / user / 1
{"id": 1, "nom d'utilisateur": "user1", "nom": "Zhang San", "Age": 20, "Balance": 100,00}
Les dépendances de fichiers POM sont les suivantes:
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <Modelversion> 4.0.0 </ ModestfulSion> <proupId> com.chhliu.springboot.restful </proupid> com.chhliu.springboot.restful </proupid> com.chhliu.springboot.restful </proupId> com.chhliu.springboot.restful </proupId> COM.CHHLIU.SPRINGBOOT.RESTFUL <ArtefactId> Springboot-Rest-Template </ ArtifactId> <DERSE> 0.0.1-SNAPSHOT </ Version> <Packaging> Jar </packaging> <name> Springboot-Remplate </name> <escription> Demi Demi pour la démarrage Spring RestTemplate </ GroupId> <ProupId> Org.SpringFramework. <ArtefactId> Spring-Boot-Starter-Parent </ ArfactId> <Dersion> 1.4.3.Release </DERNIFRIMINE> <RelativePath /> <! - Recherche Parent du référentiel -> </parent> </ Properties> <projeil.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reportting.outputencoding> <java.version> 1.7 </java.version> </properties> <dependces> <dependency> <proupId> org.springframework.boot </proupId> <artifactid> spring-boot-starter-starter-web </stifact> <Dedency> <ProupId> org.springframework.boot </proupId> <ArtifactId> Spring-Boot-starter-test </ artifactid> <ccope> Test </ccope> </Dependency> <! - Hot Boot, déploiement à chaud package de dépendance, pour la commodité de débogage, ajout de ce pack <ArtefactId> Spring-Boot-Devtools </ Artifactid> <Aportsal> true </opultal> </ Dependency> </Dependance> <Duild> <Glugins> </ Plugin> <Glugin> <ProupID> org.springFramework.boot </prôdId> <Artifactid> Spring-Boot-Maven-Plugin </RitifActid> </rand
Étant donné que nous devons convertir la chaîne JSON correspondante en un objet utilisateur après avoir utilisé RestTemplate pour appeler le service Restful, nous devons copier cette classe dans le projet, comme suit:
package com.chhliu.springboot.restful.vo; import java.math.bigdecimal; classe publique User {private long id; Nom d'utilisateur de chaîne privée; nom de chaîne privé; privé de court-circuit; équilibre privé BigDecimal; // ... omettre les méthodes de getter et de setter / ** * Attention: * Détails: Todo * @author chhliu * Temps de création: 2017-1-20 2:05:45 PM * @return * / @Override public String toString () {return "user [id =" id + ", username =" + username + ", name =" + nom + ", Âge =" + Balance = "Balance =" "]"; }} package com.chhliu.springboot.restful.Controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.restController; import org.springframework.web.client.RestTemplate; import com.chhliu.springboot.restful.vo.user; @RestController Public Class RestTemplateController {@autowired private restTemplate restTEmplate; @GetMapping ("/ template / {id}") utilisateur public findbyid (@pathvariable long id) {// http: // localhost: 7900 / user / est l'url correspondante du service précédent user u = this.resttemplate.getForObject ("http: // localhost: 7900 / user /" + id, user.class); System.out.println (U); retourne u; }} package com.chhliu.springboot.restful; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication Class public SpringbootRestTemplateApplication {// Soyez prudent lorsque nous commençons car nous injectons RestTemplate dans le contrôleur, nous devons instancier une instance de la classe lors du démarrage de Builder privé de RestEmplatebuilder @autowired; // Utilisez RestTemplateBuilder pour instancier l'objet RestTemplate. Spring a injecté l'instance RestTemplate par défaut @bean public restTemplate restTemplate () {return builder.build (); } public static void main (String [] args) {SpringApplication.run (SpringbootRestTemplateApplication.class, args); }} Entrez: http: // localhost: 7902 / modèle / 1 dans votre navigateur
Les résultats des tests sont les suivants:
Résultats de l'impression sur la console:
Utilisateur [id = 1, nom d'utilisateur = user1, name = zhang san, âge = 20, balance = 100,00]
Grâce au test ci-dessus, il est démontré que nous avons appelé avec succès le service Spring Boot Restful.
Il y a une très mauvaise chose dans le test ci-dessus.
Utilisateur u = this.RestTemplate.getForObject ("http: // localhost: 7900 / user /" + id, user.class); Le code dur apparaît ici. Lorsque l'adresse du serveur change, le code correspondant doit être modifié et une méthode améliorée est requise pour écrire l'adresse du service Restful dans le fichier de configuration.
Modifiez le contrôleur comme suit:
package com.chhliu.springboot.restful.Controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.value; import org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.restController; import org.springframework.web.client.RestTemplate; import com.chhliu.springboot.restful.vo.user; @RestController Public Class RestTemplateController {@autowired private restTemplate restTEmplate; // L'adresse URL correspondant au service RESTful @Value ("$ {user.userservicepath}") String privé UserServicePath; @GetMapping ("/ template / {id}") utilisateur public findbyid (@pathvariable long id) {user u = this.restTemplate.getForObject (this.userservicepath + id, user.class); System.out.println (U); retourne u; }}Le fichier de configuration est modifié comme suit:
server.port: 7902 user.UserServicePath = http: // localhost: 7900 / user /
Démarrer le programme:
J'ai trouvé que le test est OK. Plus tard, nous présenterons Spring Cloud pour améliorer encore cette méthode d'appel!
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.