Ich habe ein Beispiel für die Verwendung von RestTemplate geschrieben. Seit Frühling 5 wird Reactive vollständig vorgestellt und verfügt über eine reaktive Version des WebClient von RestTemplate, in diesem Artikel werden die grundlegende Verwendung von WebClient angezeigt.
Anfrage zum Tragen von Kopfzeilen
Kekse tragen
@Test public void testwithcookie () {mono <string> resp = webclient.create () .Method (httpMethod.get) .uri ("http://baidu.com") .cookie ("Token", "xxxxx") .cookie ("jSessionId", "xxxxx"). .BodyTomono (String.Class); Logger.info ("Ergebnis: {}", resp.block ()); } Basic auth
@Test public void testwithBasicicuth () {String BasicAuth = "Basic"+ Base64.getEnCoder (). CodetoString ("Benutzer: pwd" .GetBytes (Standardcharets.utf_8)); Logger.info (BasicAuth); Mono <string> resp = webclient.create () .get () .uri ("http://baidu.com") .Header (httpheaders.authorization, BasicAuth) .Reveie () .BodyTomono (String.Class); Logger.info ("Ergebnis: {}", resp.block ()); } Setzen Sie globale Benutzer-Agent
@Test public void test witHheaderFilter () {Webclient webclient = webclient.builder () .defaultheader (httpheaders.user_agent, "Mozilla/5.0 (Macintosh; Intel Mac OS x 10_12_6) Applewebkit/537.36 (KHTML, Like Gecko) (khtm, wie Gecko) (khtm, wie Gecko) (khtm, wie Gecko) (khtm, wie Gecko), wie Chrome/63.0.3239.132 Safari/537.36 ") .Filter (ExchangeFilterFunctions .basicicuthentication (" Benutzer "," Passwort ") .Filter ((ClientRequest) -> {logger.info (" Anfrage: {{{{}} ", clientRequest.meth (), ClientRequest.Meth (), ClientRequest.Meth (), ClientRequst.; ClientRequest.HeaDers () .foreach (Name, Werte) -> Werte.foreach (Wert -> logger.info ("{} = {}", name, value)); Mono <string> resp = webclient.get () .uri ("https://baidu.com") .RetReve () .BodyTomono (string.class); Logger.info ("Ergebnis: {}", resp.block ()); }Anfrage erhalten
Übergeben Sie Parameter mit Platzhalter
@Test public void testUrlPlaceholder(){ Mono<String> resp = WebClient.create() .get() // Multiple parameters can also be placed directly in the map, and the parameter name corresponds to the placeholder.uri("http://www.baidu.com/s?wd={key}&other={another}","Beijing Weather","test") //Use placeholder.retReve () .BodyTomono (String.Class); Logger.info ("Ergebnis: {}", resp.block ()); } Übergeben Sie Parameter mit dem Uribuilder
@Test public void testurlbiulder () {mono <string> resp = webclient.create () .get () .uri (Uribuilder -> UriBuilder .Scheme ("http") .host ("Www.baidu.com) .Path ("/s ") .Queryparam (" Wire ","). "). "Test") .build ()) .RetReve () .bodyTomono (String.Class); Logger.info ("Ergebnis: {}", resp.block ()); }Postform
@Test public void testFormparam () {multivalUemap <String, String> FormData = new LinkedMultivalUeMap <> (); FormData.add ("name1", "value1"); FormData.add ("name2", "value2"); Mono <string> resp = webclient.create (). Post () .uri ("http://www.w3school.com.cn/test/demo_form.asp") .ContentType (mentyptype.application_form_urlencoded) .Body (Bodyinsers.Fromforters.Fromforters.Fromforters.Fromforters.Fromforters.Fromforters. .RETRIEVE (). BodyTomono (String.Class); Logger.info ("Ergebnis: {}", resp.block ()); }Post JSON
Verwenden Sie Bohnen zum Posten
Statische Klassenbuch {String Name; String -Titel; public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String gettitle () {return title; } public void settitle (String title) {this.title = title; }} @Test public void testPostjson () {book book = new Book (); book.setName ("name"); book.settitle ("this is title"); Mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/Demo/json") .ContentType (mediateType.application_json_utf8) .body (mono.just (book), book.class). Logger.info ("Ergebnis: {}", resp.block ()); } Direkter Beitrag Raw JSON
@Test public void testpostrawjson () {mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/Demo/json") .ContentType (MediaType.Application_JSON_UTF8). ist title/",/n" + "/" Autor/":/" Dies ist Autor/"/n" + "}")) .Reveie (). bodyTomono (string.class); Logger.info ("Ergebnis: {}", resp.block ()); }Post-Binary-Upload-Datei
@Test public void testUploadFile () {httpheaders headers = new httpheaders (); Headers.SetContentType (minyType.image_png); Httpentity <classpathresource> entity = new httpentity <> (new classpatresource ("parallel.png"), Headers); MultivalUeMap <String, Object> parts = new LinkedMultivalUeMap <> (); teiles.add ("Datei", Entity); Mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/upload") .ContentType (mediateType.multiPart_form_data) .body (Bodyinserters.FrommultiPartData (Parts) .Retrieve (). Logger.info ("Ergebnis: {}", resp.block ()); }Binär herunterladen
Laden Sie das Bild herunter
@Test public void testdownloadImage () löst ioException {mono <ressourcen> resp = webclient.create (). Get () .uri ("http://www.toolip.gr/captcha?complexity=99&size=60&Length=9") .Accept (mediaTcha?complex). .RetRieve (). bodyTomono (Ressource.Class); Ressourcenressource = resp.block (); Bufferedimage bufferedimage = imageio.read (ressource.getInputStream ()); Imageio.Write (BufferedImage, "PNG", neue Datei ("captcha.png")); } Laden Sie die Datei herunter
@Test public void testDownloadFile () löscht IOException {mono <ClientResponse> resp = webclient.create (). Get () .uri ("http: // localhost: 8080/Datei/Download") .Accept (in MediaType.Application_Stet_stream). ClientResponse -Antwort = resp.block (); String disposition = response.Headerers (). Ashttpheaders (). GetFirst (httpheaders.content_disposition); String Dateiname = Disposition.substring (Disposition.Indexof ("=")+1); Ressourcenressource = Antwort.BodyTomono (Ressource.Class) .block (); Datei out = new Datei (Dateiname); FileUtils.copyInputStreamToFile (Resource.GetInputStream (), out); Logger.info (out.getabsolutepath ()); }Fehlerbehandlung
@Test public void testReve4xx () {webclient webclient = webclient.builder () .baseUrl ("https://api.github.com") .Defaultheader (httpheaders.content_type, "application/vnd.githuub.v3+json")))) .Defaultheader (httpheaders.user_agent, "Spring 5 WebClient") .build (); Webclient.responspec responsespec = webclient.method (httpMethod.get) .uri ("/user/repos? Sort = {sortfield} & Direction = {sortDirection}", "aktualisiert", "Desc") .ReTrieve (); Mono <string> mono = respotSespec .onstatus (e -> e.is4xxclientError (), resp -> {logger.Error ("Fehler: {}, msg: {}", resp.statuscode (). Value (), resp.statuscode (). RunTimeException (resp.StatusCode (). Value () + ":" + resp.statuscode (). GetReasonPhrase ()); Status: {}, msg: {} ", err.getRawStatusCode (), err.getResponseBodyAssstring ()); wirf eine neue RunTimeException (err.getMessage ();}) .onerrorreturn (" Fallback "); String result = mono.block (); Logger.info ("Ergebnis: {}", Ergebnis); }Zusammenfassung
WebClient ist eine neue Generation von asynchronisierter REST -Vorlage, und die API ist relativ einfach und reaktiv, was sehr wert ist.
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.