Grundkonzepte
Spring RestTemplate ist ein von Spring bereitgestellter Client für den Zugriff auf Rastdienste. RestTemplate bietet eine Vielzahl von bequemen Möglichkeiten zum Zugriff auf Remote -HTTP -Dienste, die die Schreibeffizienz des Kunden erheblich verbessern können. Daher verwenden viele Kunden wie Android- oder Drittanbieter-Diensteanbieter RastTemplate, um Restful-Dienste anzufordern.
RESTTEMPLATA von Spring-Webe ist eine Verkapselung der zugrunde liegenden HTTP von Java. Benutzer, die RestTemPlata verwenden, können nicht mehr auf die zugrunde liegende Verbindungseinrichtung achten. RestTemplata unterstützt nicht nur die REST -Spezifikation, sondern definiert auch den Return -Value -Objekttyp.
In der Verwendung können Sie ein RastTemplate -Objekt direkt neu haben. Es gibt einige Nachrichtenkonverter, die Nachrichten im von uns erstellten RESTTEMPLE -Objekt zurückgeben. Sie finden den entsprechenden Konverter basierend auf dem Medietyp der zurückgegebenen Daten und führen Sie die Medientyp -Konvertierung durch. Sie können auch selbst einen Nachrichtenkonverter erstellen, eine Klasse erstellen, die die AbstractGenerichttpMessageConverter <T> -Klasse erbt oder die HttpMessArverter <T> -Schinschnittstelle implementiert. Es ist zu beachten, dass die CanRead -Methode und die Canwrite -Methode selbst beurteilt werden sollten, Parameter in den Stream in der Schreib- oder Schreibmethode schreiben und das zurückgegebene Ergebnis aus dem Körper des Streams in der ReadInternal- oder Lesemethode und der Typ -Karte erhalten.
Das RestTemplate -Objekt erstellt HTTP -Anforderungen unten, indem die Implementierung unter dem Paket java.net verwendet wird. Sie können verschiedene HTTP -Anforderungsmethoden angeben, indem Sie ClienthttprequestFactory verwenden.
Die ClienthttprequestFactory -Schnittstelle bietet hauptsächlich zwei Implementierungsmethoden:
RestTemplate verwendet standardmäßig SimplyClientHtTpRequestFactory und ruft interne httpConnection auf, um JDK aufzurufen. Das Standard -Timeout beträgt -1. Wir können die Auszeit selbst definieren.
SimpleClientHttpRequestFactory Factory = new SimpleClientHtTpRequestFactory (); // Setzen Sie die Verbindungszeitüberschreitung, Einheit Millisecond Factory. RastTemplate rastTemplate = new rastTemplate (fabrik);
Verwenden Sie GET -Anfragen:
String url = "http: // localhost: 80/mandy/login.json? Account = 123456 & password = 123456"; Ergebnis res = rastTemplate.getforObject (URL, Ergebnis.ClASS);
RESTTEMPLATE -Quellcode:
@Override public <T> T getForObject (String -URL, Klasse <T> Antworttyp, Objekt ... urlvariables) löst rastClientException aus {RequestCallback RequestCallback = ACCEPTheaderRequestCallback (Antworttyp); HttpMessageConverterExtractor <T> responsextractor = new httpMessageConverterextraktor <t> (ResponseType, getMessageConverters (), Logger); return execute (URL, httpMethod.get, RequestCallback, Responsextractor, urlvariables); }Es ist am besten, GET -Anforderung zu verwenden, um die Parameter direkt an die Adresse zu spleißen. Ich weiß nicht warum. Wenn Sie den dritten Parameter verwenden, funktioniert auch der MultivalUemap -Typ nicht (einige Leute im Internet sagen, dass die Verwendung des MultivalUemap -Typs in Ordnung ist, aber ich habe es versucht, aber es funktioniert nicht)
Postanfrage verwenden:
HashMap <String, Object> map = new HashMap <String, Object> (); map.put ("name", "test"); map.put ("Konto", "Qwer"); map.put ("Passwort", "qWer"); ObjectMapper Mapper = new ObjectMapper (); String JSONSON = NULL; try {JSONSON = mapper.writeValueasString (MAP); } catch (Ausnahme e) {e.printstacktrace (); } // HTTP -Header -Entität erstellen und Headerinformationen ausfüllen, z. httpheaders.setContentType (mediateType.application_json_utf8); // Erstellen Sie die HTTP -Entität erstellen, Sie können den Konstruktor direkt verwenden, um den Anforderungskörper und den Anforderungsheader in httpentity <string> httpentity = new httpentity <string> (jserstr2, httpentpent) zu setzen; "http: // localhost: 80/mandy/user_enable.json"; // die Methode zum Anfordern von Ergebnis res2 = rastTemplate.postforObject (URL, httpentity, result.class);RESTTEMPLATE -Quellcode:
@Override public <T> T postforObject (String -URL, Objektanforderung, Klasse <T> Antworttyp, Objekt ... Urivariables) löst restClientException aus {RequestCallback RequestCallback = httpentityCallback (Request, Antworttyp); HttpMessageConverterExtractor <T> responsextractor = new httpMessageConverterextraktor <t> (ResponseType, getMessageConverters (), Logger); return execute (URL, httpMethod.post, RequestCallback, Responsextractor, Urivariablen); }Verwenden Sie Put -Anfragen:
HashMap <String, Object> map = New HashMap <String, Object> (); map.put ("user_id", "1"); map.put ("enable", 0); E. printstacktrace ();} // HTTP -Header -Entität erstellen und Header -Informationen ausfüllen, z. Httpentity <string> httpentity = new httpentity <string> (JSONSON, HTTPHEADERS); String url = "http: // localhost: 80/mandy/user_enable.json"; restTemplate.put (url, httpentity);RESTTEMPLATE -Quellcode:
@Override public void put (String -URL, Objektanforderung, Objekt ... urlvariables) löst rastClientException {RequestCallback RequestCallback = httpentityCallback (Request) aus; execute (url, httpMethod.put, requestCallback, null, urlvariables); }Ein kleiner Nachteil dieser Methode ist, dass es keinen Rückgabewert des Anforderungsergebnisses gibt. Wenn Sie den Rückgabewert verwenden müssen, können Sie diese Methode nicht verwenden.
Wenn Sie eine Anforderung des Löschens verwenden möchten, befinden sich nur die folgenden Parameter in der Parameterspalte der Put -Methode von rastTemplate
@Overridepublic void delete(String url, Object... urlVariables) throws RestClientException { execute(url, HttpMethod.DELETE, null, null, urlVariables);}@Overridepublic void delete(String url, Map<String, ?> urlVariables) throws RestClientException { execute(url, HttpMethod.delete, null, null, urlvariables);}@oversidepublic void delete (uri url) löst rastClientException {execute (url, httpmethod.delete, null, null);} ausDiese Methoden geben uns keine Parameter und lassen Sie uns den Anforderungskörperinhalt einfügen. Wenn Sie also die von RestTemplate angegebene Methode verwenden möchten, muss die Schnittstelle den ruhigen Stil verwenden, die Parameter in die Adresse einfügen und die Parameter über die @PathVariable (Value = "") Annotation erhalten.
Schlüsselpunkt: Tatsächlich können wir die Exchange -Methode von RestTemplate wie folgt direkt verwenden
@OverridePublic <T> Antwortabteilung <T> Exchange (String -URL, HttpMethod -Methode, Httpentity <?> RequestEntity, Class <T> Antworttyp, Objekt ... Urivariables) löst restClientException aus {RequestCallback RequestCallback = httpentityCallback (Responsexception); ResponseExtractor <ResponseEnentity <t >> responsextractor = responseentityExtractor (ResponseType); Return Execute (URL, Methode, RequestCallback, Responsextractor, Urivariables);}Hier listen wir nur eine Methode auf. Die anderen finden sich im Quellcode. Diese Methode kann alle Arten von Anforderungen erstellen.
Bei dieser Methode kann der Methodeparameter durch die HTTPMethod -Aufzählung erhalten werden. Der RequestEntity -Parameter ist die von selbst eingekapselte Httpentity -Entität, einschließlich der Anforderungsbehörde und des Anforderungsheaders. Der Parameter ResponseType ist eine Zuordnungsklasse, die das Ergebnis zurückgibt. Der Parivariablenparameter vermittelt mir den Eindruck, dass er nutzlos ist (persönliche Meinung). Der Zugriff auf die Anforderungsrückgabeschnittstelle kann über die Methode Getbody () des Methodenrückgabewerts erhalten werden.
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.