Я написал пример использования Resttemplate. Поскольку Spring 5 полностью представляет Reactive, а также имеет реактивную версию WebClient Resttemplate, в этой статье будет показано основное использование WebClient.
Просьба о ношении заголовка
Носить печенье
@Test public void testwithcookie () {mono <string> resp = webclient.create () .method (httpmethod.get) .uri ("http://baidu.com") .cookie ("token", "xxxx") .cookie ("jsessionId", "xxxx"). .bodytomono (String.class); Logger.info ("result: {}", resp.block ()); } Носить с собой базовую аут
@Test public void testwithbasicauth () {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. Logger.info ("result: {}", resp.block ()); } Установите глобальный пользовательский агент
@Test public void testwithheaderfilter () {webclient webclient = webclient.builder () .defaultheader (httpheaders.user_agent, "Mozilla/5.0 (Macintosh; Intel Mac Os x 10_12_6) AppleWebkit/537.36 (khtml, kecko) chcrome/69.13333333336/537.36 (khtml, kecko) hr.69. Safari/537.36 ") .filter (ExchangeFilterFunctions .basicauthentication (" пользователь "," пароль ")) .filter ((ClientRequest, Next) -> {logger.info (" запрос: {} {} ", clientRequest.method (), clientRequest.url (); -> values.foreach (value -> logger.info ("{} = {}", name, value)); Mono <string> resp = webclient.get () .uri ("https://baidu.com") .retrieve () .bodytomono (String.class); Logger.info ("result: {}", resp.block ()); }получить запрос
Параметры передачи с использованием заполнителя
@Test public void testurlplaceholder () {mono <string> resp = webclient.create () .get () // Многочисленные параметры также могут быть размещены непосредственно на карте, а имя параметра соответствует заполнению. Placeholder.retrive () .bodyTomono (String.class); Logger.info ("result: {}", resp.block ()); } Передайте параметры с использованием uribuilder
@Test public void testurlbiulder () {mono <string> resp = webclient.create () .get () .uri (uribuilder -> uribuilder .scheme ("http") .host ("www.baidu.com") .path ("/s"). .queryparam ("Другой", "Тест") .build ()) .retrieve () .bodytomono (String.class); Logger.info ("result: {}", resp.block ()); }Пост форма
@Test public void testformpormparam () {multivaluemap <string, string> formData = new LinkedMultiveluemap <> (); 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). CodyInserters.fromformData (формат). .retrive (). Bodytomono (String.class); Logger.info ("result: {}", resp.block ()); }Post json
Используйте бобы для публикации
Статическая классная книга {string name; Строка название; public String getName () {return name; } public void setName (string name) {this.name = name; } public String getTitle () {return title; } public void settitle (строка заголовка) {this.title = title; }} @Test public void testpostjson () {book book = new book (); book.setname ("имя"); book.settitle («Это название»); Mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/demo/json") .contenttype (mediatype.application_json_utf8) .body (mono.just (book), book.class) .retrive (). Logger.info ("result: {}", resp.block ()); } Direct Post Raw Json
@Test public void testpoStrawjson () {mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/demo/json"). is title/",/n" + "/" Автор/":/" Это автор/"/n" + "}")) .retrieve (). Bodytomono (String.class); Logger.info ("result: {}", resp.block ()); }Опубликуйте бинарную файл
@Test public void testuploadFile () {httpheaders headers = new httpheaders (); headers.setContentType (mediaType.image_png); Httpentity <classpathresource> entity = new httpentity <> (новый ClassPathresource ("parallel.png"), заголовки); MultivalueMap <String, Object> Parts = new LinkedMultivalueMap <> (); parts.add ("file", Entity); Mono <string> resp = webclient.create (). Post () .uri ("http: // localhost: 8080/upload") .contenttype (mediatype.multipart_form_data) .body (bodyinserters.frommultipartdata (parts) .retrive (). Logger.info ("result: {}", resp.block ()); }Скачать бинарный
Загрузите картинку
@Test public void testdownloadImage () Throws IOException {mono <serrasce> resp = webclient.create (). Get () .uri ("http://www.toolip.gr/captcha?complexity=99&size=60&length=9"). .retrive (). Bodytomono (resource.class); Ресурсный ресурс = resp.block (); BufferedImage bufferedImage = imageio.read (resource.getInputStream ()); Imageio.write (BufferedImage, «Png», новый файл ("captcha.png")); } Загрузите файл
@Test public void testdownloadfile () Throws ioException {mono <clientResponse> resp = webclient.create (). Get () .uri ("http: // localhost: 8080/file/download") .accept (mediaType.application_octet_stream) .exchange (); ClientResponse ответ = resp.block (); Строковая диспения = ответ. String fileName = Disposition.SubString (Disposition.Indexof ("=")+1); Ресурс ресурса = response.bodytomono (resource.class) .block (); File Out = новый файл (имя файла); Fileutils.copyinputstreamtofile (resource.getinputstream (), out); Logger.info (out.getabsolutepath ()); }Обработка ошибок
@Test public void testretrieve4xx () {webclient webclient = webclient.builder () .baseurl ("https://api.github.com") .defaultheader (httphaders.content_type, "application/vndd.github.v3+json") .DefauLtheDheaderseDheaderseDheadersedfeadersedfeadersedfeader. "Spring 5 WebClient") .build (); Webclient.responsepepec responsepec = webclient.method (httpmethod.get) .uri ("/user/repos? Sort = {sortfield} & direction = {sortDirection}", "updated", "desc") .retrieve (); Mono <string> mono = responsepec .onstatus (e -> e.is4xxclienterror (), resp -> {logger.error ("ошибка: {}, msg: {}", resp.statuscode (). + ":" + resp.statuscode (). getReasonPhrase ()); Runtimeexception (err.getMessage ()); String result = mono.block (); Logger.info ("result: {}", result); }краткое содержание
WebClient - это новое поколение шаблона Async Rest, а API относительно прост и реактивен, что очень стоит использовать.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.