J'ai écrit un exemple d'utilisation de Rest -mplate. Depuis le printemps 5 introduit entièrement réactif et dispose également d'une version réactive de WebClient de RestTemplate, cet article affichera l'utilisation de base de WebClient.
Demande de transporter de l'en-tête
Porter les biscuits
@Test public void testwithcookie () {mono <string> resp = webClient.create () .Method (httpMethod.get) .uri ("http://baidu.com") .cookie ("token", "xxxx") .cookie ("jSesseId", "xxxx") .Rerievey (). .BodyTomono (String.class); Logger.info ("Result: {}", resp.block ()); } Porter l'automobile de base
@Test public void testwithbasicard () {String BasicAuth = "Basic" + Base64.GetEncoder (). EncodeToString ("user: pwd" .getBytes (standardCharsets.Utf_8)); Logger.info (BasicAuth); Mono <string> resp = webClient.create () .get () .uri ("http://baidu.com") .header (httpheaders.authorization, basicAuth) .Reverieve () .bodyTomono (string.class); Logger.info ("Result: {}", resp.block ()); } Définir l'agent utilisateur global
@Test public void testWithHeaderFilter () {webClient webClient = webClient.Builder () .DefaulTheader (httpheaders.user_agent, "Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_12_6) Chrome / 63.0.3239.132 Safari / 537.36 ") .Filter (ExchangeFilterFunctions .BasicaThentication (" User "," Mot de passe ")) .Filter ((clientRequest, Next) -> {Logger.info (" Demande: {} {} ", ClientRequest.Method (), client. ClientRequest.heders () .Forach ((name, valeurs) -> Values.ForEach (Value -> Logger.info ("{} = {}", name, valeur)); Mono <string> resp = webClient.get () .uri ("https://baidu.com") .Retrerie () .bodyTomono (string.class); Logger.info ("Result: {}", resp.block ()); }faire une demande
Passer par les paramètres à l'aide d'espace réservé
@Test public void TesurlplaceHolder () {mono <string> resp = webclient.create () .get () // plusieurs paramètres peuvent également être placés directement dans la carte, et le nom de paramètre correspond à l'espaceholder.uri ("http://www.baidu.com/s?wd= {key }&other= ~}" placeholder.RetReeve () .BodyTomono (String.class); Logger.info ("Result: {}", resp.block ()); } Passer des paramètres à l'aide d'uribuilder
@Test public void TesurlBiulder () {mono <string> resp = webclient.create () .get () .uri (uribuilder -> uribuilder .scheme ("http") .host ("www.baid.com") .path ("/ s") .Queryparam ("wd", "beijing"). "test") .build ()) .Rerevey () .bodyTomono (String.class); Logger.info ("Result: {}", resp.block ()); }Formulaire
@Test public void testFormParam () {MultivalieMap <String, String> FormData = new LinkedMultivalieMap <> (); 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 (mediatype.application_form_urlencoded). .RetReeve (). BodyTomono (String.class); Logger.info ("Result: {}", resp.block ()); }post json
Utilisez des haricots pour publier
livre de classe statique {nom de chaîne; Titre de la chaîne; public String getName () {Nom de retour; } 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 ("nom"); book.setTitle ("This is title"); Mono <string> resp = webClient.create (). Post () .uri ("http: // localhost: 8080 / démo / json") .contentType (mediaType.Application_Json_Utf8) .Body (mono.Just (book), book.class) .retrue (). Logger.info ("Result: {}", resp.block ()); } Post direct JSON RAW
@Test public void testPostrawjson () {mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080 / démo / json") .contentType (mediatype.application_json_utf8) .body. est title / ", / n" + "/" auteur / ": /" Ceci est auteur / "/ n" + "}")) .Reverieve (). BodyTomono (string.class); Logger.info ("Result: {}", resp.block ()); }Publier un fichier de téléchargement binaire
@Test public void TESTUPLOADFILE () {httpheaders en-têtes = new httpheaders (); henders.setContentType (mediatype.image_png); Httpentity <SclassPathResource> Entity = new Httpentity <> (new ClassPathResource ("parallel.png"), en-têtes); MultivalieMap <String, Object> Parts = new LinkedMultivalieMap <> (); part.add ("fichier", entité); Mono <string> resp = webClient.create (). Post () .uri ("http: // localhost: 8080 / upload") .contentType (mediaTommulpe.multipartipart_form_data) .body (bodyInserters.frommultiplata); Logger.info ("Result: {}", resp.block ()); }Télécharger le binaire
Télécharger l'image
@Test public void TestDownloadImage () lève ioException {mono <ourcece> resp = webClient.create (). Get () .uri ("http://www.toollip.gr/captcha?complexity=99&size=60&length=9"). .Refrieve (). BodyTomono (ressource.class); Ressource ressource = resp.block (); BufferedImage BufferedImage = ImageIo.Read (Resource.getInputStream ()); Imageo.write (bufferedImage, "png", nouveau fichier ("captcha.png")); } Télécharger le fichier
@Test public void testdownloadFile () lève ioException {mono <clientResponse> resp = webClient.create (). Get () .uri ("http: // localhost: 8080 / file / download") .accept (mediatype.application_octet_stream) .exchange (); ClientResponse Response = resp.block (); String Disposition = Response.Headers (). AshttPheaders (). GetFirst (httpheaders.content_disposition); String FileName = Disposition.SubString (Disposition.Indexof ("=") + 1); Resource Resource = Response.BodyTomono (Resource.Class) .Block (); File out = nouveau fichier (nom de fichier); FileUtils.copyInputStreamtoFile (ressource.getInputStream (), out); Logger.info (out.getAbsolutepath ()); }Gestion des erreurs
@Test public void TestRetReve4xx () {webClient webClient = webClient.builder () .baseurl ("https://api.github.com") .defaultheader (httpheaders.content_type, "application / vnd.getheb.v3 + json") .DefaulTheader (httpheaders.user_agent, "Spring 5 WebClient") .build (); WebClient.ResponSSespecApSEspec = webClient.Method (httpMethod.get) .uri ("/ user / repos? Sort = {sortfield} & direction = {sortDirection}", "Updated", "desc") .Rerevey (); Mono <string> mono = réponsespecec .onsatus (e -> e.is4xxclienterror (), resp-> {logger.error ("error: {}, msg: {}", resp.statuscode (). Value (), resp.statuscode (). GetReasonPode (). + ":" + resp.statuscode (). getReasonphrase ()));}) .bodyTomono (string.class) .DoonError (webClientResponseException.class, err -> {logger.info ("Erreur Status:}, msg: {}", err.getRawstatue (), Err.getRebody ()) RuntimeException (err.getMessage ());}) .onerrorRet ("Fallback"); Résultat de chaîne = mono.block (); Logger.info ("result: {}", résultat); }résumé
WebClient est une nouvelle génération de modèle de repos asynchrone, et l'API est relativement simple et réactive, ce qui vaut la peine d'être utilisé.
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.