Concepts de base
Spring 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. Par conséquent, de nombreux clients tels que les fournisseurs de services Android ou tiers utilisent RestTemplate pour demander des services Restful.
Restemplata de Spring-Web est une encapsulation du HTTP sous-jacent de Java. Les utilisateurs utilisant Restemplata ne peuvent plus prêter attention à l'établissement de connexion sous-jacent. RESTTEMPLATA prend en charge non seulement la spécification de repos, mais définit également le type d'objet de valeur de retour.
Dans l'utilisation, vous pouvez directement nouveau un objet RestTemplate. Il y aura des convertisseurs de messages qui renvoient les messages dans l'objet RestTemplate que nous avons créé. Vous pouvez trouver le convertisseur correspondant basé sur le média des données renvoyées et effectuer la conversion MediaType. Vous pouvez également créer un convertisseur de messages vous-même, créer une classe qui hérite de la classe AbstractGeneRrichTTPMessageConverter <T> ou implémente l'interface httpMessageConverter <T>. Il convient de noter que la méthode Canread et la méthode CanWrite doivent être jugées par vous-même, écrivez des paramètres au flux dans la méthode WriteInternal ou Write, et obtenir le résultat renvoyé du corps du flux dans la méthode de lecture ou de lecture et la carte de type.
L'objet RestTemplate crée des demandes HTTP en bas en utilisant l'implémentation sous le package java.net. Vous pouvez spécifier différentes méthodes de demande HTTP en utilisant ClientHttpRequestFactory.
L'interface ClientHttpRequestFactory fournit principalement deux méthodes d'implémentation:
RestTemplate utilise SimpleClientHttpRequestFactory par défaut et appelle en interne httpconnection pour appeler JDK. Le délai d'expiration par défaut est -1. Nous pouvons définir le temps mort nous-mêmes.
SimpleClientHttpRequestFactory Factory = new SimpleClientHttpRequestFactory (); // Définissez le délai de connexion, unité MilliseCond Factory.SetConnectTimeout (5000); // définir le délai de lecture, unité MilliseCond Factory.SetReadTimeout (10000); RestTemplate RestTemplate = new RestTemplate (Factory);
Utilisez des demandes de Get:
String url = "http: // localhost: 80 / mandy / login.json? Account = 123456 & mot de passe = 123456"; resul Res = restTemplate.getForObject (url, result.class);
Code source RestTemplate:
@Override public <T> t getForObject (URL de chaîne, classe <T> ResponseType, objet ... urlvariables) lève RestClientException {requestCallback requestCallback = acceptHeaderRequestCallback (ResponseType); HttpMessageConverterExtractor <T> ResponseExtractor = new HttpMessageConverterExtractor <T> (ResponseType, getMessageConverters (), Logger); return execute (URL, httpMethod.get, requestCallback, réponsextractor, urlvariables); }Il est préférable d'utiliser une demande Get pour épisser les paramètres directement à l'adresse. Je ne sais pas pourquoi. Si vous utilisez le troisième paramètre, même le type multivalemap ne fonctionnera pas (certaines personnes sur Internet disent que l'utilisation du type multivalemap est OK, mais je l'ai essayé mais cela ne fonctionnera pas)
Utiliser la demande de poste:
Hashmap <string, objet> map = new hashmap <string, object> (); map.put ("name", "test"); map.put ("compte", "qwer"); map.put ("mot de passe", "qwer"); ObjectMapper Mappeur = new ObjectMapper (); String jSontr = null; essayez {jsonstr = mapper.writeValueAsString (map); } catch (exception e) {e.printStackTrace (); } // Créer une entité d'en-tête HTTP et remplir les informations d'en-tête, telles que le format de données httpheaders httpheaders = new httpheaders (); httpheaders.setContentType (mediatype.application_json_utf8); // Créer une entité http, vous pouvez directement utiliser le constructeur pour mettre le corps de la demande et l'en-tête de demande dans httpentity <string> httpentity = new httpentity <string> (jSont2, httheaders); string url = "http: // localhost: 80 / mandy / user_enable.json"; // appelant la méthode pour demander le résultat res2 = restTemplate.postForObject (url, httpentity, result.class);Code source RestTemplate:
@Override public <T> T PostForObject (URL de chaîne, demande d'objet, classe <T> ResponseType, objet ... Urivariables) lève RestClientException {requestCallback requestCallback = httpentityCallback (request, resensetype); HttpMessageConverterExtractor <T> ResponseExtractor = new HttpMessageConverterExtractor <T> (ResponseType, getMessageConverters (), Logger); return exécuter (URL, httpMethod.post, requestCallback, réponsextractor, urivariables); }Utiliser les demandes de put:
Hashmap <string, object> map = new hashmap <string, object> (); map.put ("user_id", "1"); map.put ("activer", 0); objectMapper mapper = new ObjectMapper (); String JSont = null; try {jSontr = mapper.writevalueaSString (map);} catch (jsonprocessException a) e.printStackTrace ();} // Créez une entité d'en-tête HTTP et remplissez les informations d'en-tête, telles que le format de données httpheaders httpheaders = new httpheaders (); httpheaders.setContentType (mediaType.Application_json_utf8); // Créer HTTP ENTITAL Httpentity <string> httpentity = new httpentity <string> (jsonstr, httpheaders); String url = "http: // localhost: 80 / mandy / user_enable.json"; restTEmplate.put (url, httpentity);Code source RestTemplate:
@Override public void put (URL de chaîne, demande d'objet, objet ... urlvariables) lève RestClientException {requestCallback requestCallback = httpentityCallback (request); exécuter (URL, httpMethod.put, requestCallback, null, urlvariables); }Un petit inconvénient de cette méthode est qu'il n'y a pas de valeur de retour du résultat de la demande. Si vous devez utiliser la valeur de retour, vous ne pouvez pas utiliser cette méthode.
Si vous souhaitez utiliser une demande de type de suppression, il n'y a que les paramètres suivants dans la colonne des paramètres de la méthode de put de RestTemplate
@OverRidePublic void Delete (URL de chaîne, objet ... urlvariables) lève RestClientException {EXECUTE (URL, httpMethod.delete, null, null, urlvariables);} @ OverRidepublic void Delete (String url, map <string,?> Urlvariables) Laste HttpMethod.Delete, null, null, urlvariables);} @ OverRidepublic void delete (URI URL) lève RestClientException {EXECUTE (URL, httpMeth.Delete, null, null);};Ces méthodes ne nous donnent pas de paramètres et nous permettent de mettre le contenu du corps de la demande, donc si vous souhaitez utiliser la méthode de suppression fournie directement par Restemplate, l'interface doit utiliser le style Restful, mettre les paramètres dans l'adresse et obtenir les paramètres via l'annotation @PathVariable (valeur = "").
Point clé: en fait, nous pouvons utiliser directement la méthode d'échange de RestTemplate, comme suit
@OverRidePublic <T> Responsentity <T> Exchange (URL de chaîne, méthode httpMethod, httpentity <?> RequestEntity, class <t> ResponseType, objet ... urivariables) lève RestClientException {requestcallback requestCallback = httpentityCallback (requestEntity, resensetyP); ResponseExtractor <ResponseNtity <T>> ResponseExtractor = ResponsentityExtractor (ResponseType); return execure (URL, méthode, requestCallback, réponsextractor, urivariables);}Ici, nous ne répertorions qu'une seule méthode. Les autres peuvent être trouvés dans le code source. Cette méthode peut faire tous les types de demandes.
Dans cette méthode, le paramètre de la méthode peut être obtenu via l'énumération HttpMethod. Le paramètre de demande de demande est l'entité httpentity encapsulée par elle-même, y compris le corps de la demande et l'en-tête de demande. Le paramètre ResponseType est une classe de mappage qui renvoie le résultat. Le paramètre urivariables me donne l'impression qu'il est inutile (opinion personnelle). L'accès à l'interface de retour de demande peut être obtenu via la méthode getBody () de la valeur de retour de la méthode.
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.