Eu escrevi um exemplo de uso do Resttemplate. Como a primavera 5 apresenta totalmente reativa e também possui uma versão reativa do WebClient do Resttemplate, este artigo mostrará o uso básico do WebClient.
Solicitação para carregar o cabeçalho
Carregue biscoitos
@Test public void testWithcookie () {mono <string> resp = webclient.create () .method (httpmethod.get) .uri ("http://baidu.com") .cookie ("token", "xxxx") .cookie ("jsiSidid", "xxxx"). .BodyTomono (String.class); Logger.info ("Resultado: {}", resp.block ()); } Carregue Auth Basic
@Test public void testWithBasicauth () {String BasicAuth = "Basic"+ Base64.GetEncoder (). EncodeToString ("Usuário: PWD" .GetBytes (StandardSetSets.utf_8)); Logger.info (BasicAuth); Mono <string> resp = webclient.create () .get () .uri ("http://baidu.com") .Header (httpheaders.authorization, basicauth) .retrive () .bodyTomono (string.class); Logger.info ("Resultado: {}", resp.block ()); } Defina o agente de usuário global
@Test public void testWithHeaderFilter () {webclient webclient = webclient.builder () .defaulttheader (httpheaders.user_agent, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11), Applewebkit/53736 (KhtmM; Chrome/63.0.3239.132 Safari/537.36 ") .Filter (ExchangeFilterFunctions .basicauthentication (" user "," senha ") .Filter ((clientRequest, a seguir) -> {Logger.info (" Solicitação: {} {} ",, cliente) -> {Logger.info (" ClientRequest.Header () .ForEach (Nome, valores) -> valores.ForEach (Valor -> Logger.info ("{} = {}", nome, valor)); Mono <string> resp = webclient.get () .uri ("https://baidu.com") .retrieve () .bodytomono (string.class); Logger.info ("Resultado: {}", resp.block ()); }Obtenha solicitação
Passe os parâmetros usando espaço reservado
@Test public void testurlplaceholder () {mono <string> resp = webclient.create () .get () // parâmetros múltiplos também podem ser colocados diretamente no mapa, e o nome do parâmetro corresponde ao someholder.uri ("http://ww.baid.com/s?wd= { placeholder.retrieve () .bodyTomono (String.class); Logger.info ("Resultado: {}", resp.block ()); } Passe os parâmetros usando o Uribuilder
@Test public void testurlbiulder () {mono <string> resp = webclient.create () .get () .uri (uribuilder -> uribuilder .scheme ("http") .host ("www.baidu.com"). .build ()) .retrieve () .bodyTomono (string.class); Logger.info ("Resultado: {}", resp.block ()); }Pós -formulário
@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 (mediatype.application_form_urlecded) .bodyInserters.fromformdata .retrieve (). bodytomono (string.class); Logger.info ("Resultado: {}", resp.block ()); }Post JSON
Use feijão para postar
Classe Static Book {Nome da String; Título da string; public String getName () {Return Name; } public void setName (nome da string) {this.name = name; } public string gettitle () {return título; } public void Settitle (título da string) {this.title = title; }} @Test public void testPostjson () {Book Book = new Book (); book.setName ("Nome"); book.setTitle ("This Is Title"); Mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/demo/json") .contentType (mediatype.application_json_utf8) .body (mono.just (book), book.l). Logger.info ("Resultado: {}", resp.block ()); } Post Direct Raw JSON
@Test public void testPoStrawjson () {mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/Demo/json") .ContentType (MediaType.Application_Json_Utf8).). título/",/n" + "/" autor/":/" isto é autor/"/n" + "}"). Logger.info ("Resultado: {}", resp.block ()); }Publique o arquivo binário-upload
@Test public void testUploadfile () {httpheaders headers = new httpheaders (); headers.setContentType (mediatype.image_png); Httpentity <sClassPathResource> entidade = nova httpentity <> (new ClassPathResource ("parallel.png"), cabeçalhos); Multivaluemap <string, objeto> partes = new LinkedMultivaluemap <> (); partes.add ("arquivo", entidade); Mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/upload") .contentType (mediatype.multipart_form_data) .bodySerters.FromultipartData (partes)). Logger.info ("Resultado: {}", resp.block ()); }Baixe o binário
Baixe a imagem
@Test public void testwnloadImage () lança ioexception {mono <cource> resp = webclient.create (). Get () .uri ("http://www.toolip.gr/captcha?complexity=99& .retrieve (). BodyTomono (Resource.Class); Recurso de recurso = resp.block (); BufferImage bufferImage = imageio.read (Resource.getInputStream ()); Imageio.write (bufferImage, "png", novo arquivo ("captcha.png")); } Baixe o arquivo
@Test public void testwnloadfile () lança ioexception {mono <clientResponse> resp = webclient.create (). Get () .uri ("http: // localhost: 8080/arquivo/download") .accept (mediatype.application_octet_stream). CLIENTRESPONSETIVO RESPOSTA = RESP.BLOCK (); Disposição de string = Response.Headers (). Ashttpheaders (). String filename = disposition.substring (disposition.IndexOF ("=")+1); Recurso Resource = Response.BodyTomono (Resource.Class) .Block (); Arquivo out = novo arquivo (nome do arquivo); Fileutils.copyInputStreamTofile (Resource.getInputStream (), out); Logger.info (out.getabsolutepath ()); }Manuseio de erros
@Test public void testRetrieve4xx () {webclient webclient = webclient.builder () .baseurl ("https://api.github.com") .defaulttheader (htpppheaders.content_type, "Application/Vnd.github.v3" Json "Json" Json "Json") .Defaulttheader (httpheaders.user_agent, "Spring 5 webclient") .build (); Webclient.ResponsSpec ResponsESpec = webclient.method (httpmethod.get) .uri ("/user/repos? Sort = {Sortfield} & Direction = {SortDirection}", "Atualizado", "Desc") .retrive (); Mono <string> mono = ResponsePec .Onstatus (e -> e.is4xxclientarError (), resp -> {Logger.error ("Error: {}, msg: {}", resp....erTuscode (). ":" + resp.statuscode (). getReasonphrase ())); RUNTIMEIRAÇÃO (ERR.GETMESSAGE ()); Resultado da string = mono.block (); Logger.info ("Resultado: {}", resultado); }resumo
O WebClient é uma nova geração de modelo de descanso assíncrono, e a API é relativamente simples e reativa, o que vale muito a pena usar.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.