Java调用Http接口(7,end)--WebClient调用Http接…
2019-11-29 16:02:08来源:博客园 阅读 ()
Java调用Http接口(7,end)--WebClient调用Http接口
WebClient是Spring提供的非阻塞、响应式的Http客户端,提供同步及异步的API,将会代替RestTemplate及AsyncRestTemplate。文中所使用到的软件版本:Java 1.8.0_191、SpringBoot 2.2.1.RELEASE。
1、服务端
参见Java调用Http接口(1)--编写服务端
2、调用
使用WebClient需要用到Reactor Netty,依赖如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webflux</artifactId> </dependency> <dependency> <groupId>io.projectreactor.netty</groupId> <artifactId>reactor-netty</artifactId> </dependency>
2.1、GET请求
public static void get() { String requestPath = "http://localhost:8080/demo/httptest/getUser?userId=1000&userName=李白"; WebClient webClient = WebClient.create(); Mono<String> mono = webClient.get().uri(requestPath).retrieve().bodyToMono(String.class); //同步方式 System.out.println("get block返回结果:" + mono.block()); //异步方式 final CountDownLatch latch = new CountDownLatch(5); for (int i = 0; i < 5; i++) { requestPath = "http://localhost:8080/demo/httptest/getUser?userId=1000&userName=李白" + i; mono = webClient.get().uri(requestPath).retrieve().bodyToMono(String.class); mono.subscribe(new Consumer<String>() { @Override public void accept(String s) { latch.countDown(); System.out.println("get subscribe返回结果:" + s); } }); } try { latch.await(); } catch (Exception e) { e.printStackTrace(); } }
2.2、POST请求(发送键值对数据)
public static void post() { String requestPath = "http://localhost:8080/demo/httptest/getUser"; WebClient webClient = WebClient.create(); MultiValueMap<String, String> map = new LinkedMultiValueMap <String, String>(); map.add("userId", "1000"); map.add("userName", "李白"); Mono<String> mono = webClient.post().uri(requestPath).bodyValue(map).retrieve().bodyToMono(String.class); System.out.println("post返回结果:" + mono.block()); }
2.3、POST请求(发送JSON数据)
public static void post2() { String requestPath = "http://localhost:8080/demo/httptest/addUser"; WebClient webClient = WebClient.create(); String param = "{\"userId\": \"1001\",\"userName\":\"杜甫\"}"; Mono<String> mono = webClient.post().uri(requestPath).contentType(MediaType.APPLICATION_JSON).bodyValue(param) .retrieve().bodyToMono(String.class); System.out.println("post json返回结果:" + mono.block()); }
2.4、上传文件
public static void upload() { String requestPath = "http://localhost:8080/demo/httptest/upload"; WebClient webClient = WebClient.create(); Mono<String> mono = webClient.post().uri(requestPath).contentType(MediaType.APPLICATION_OCTET_STREAM) .bodyValue(new FileSystemResource("d:/a.jpg")).retrieve().bodyToMono(String.class); System.out.println("upload返回结果:" + mono.block()); }
2.5、上传文件及发送键值对数据
public static void mulit() { String requestPath = "http://localhost:8080/demo/httptest/multi"; WebClient webClient = WebClient.create(); MultipartBodyBuilder builder = new MultipartBodyBuilder(); builder.part("param1", "参数1"); builder.part("param2", "参数2"); builder.part("file", new FileSystemResource("d:/a.jpg")); MultiValueMap<String, HttpEntity<?>> parts = builder.build(); Mono<String> mono = webClient.post().uri(requestPath) .bodyValue(parts).retrieve().bodyToMono(String.class); System.out.println("mulit返回结果:" + mono.block()); }
2.6、完整例子
package com.inspur.demo.http.client; import java.util.concurrent.CountDownLatch; import java.util.function.Consumer; import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpEntity; import org.springframework.http.MediaType; import org.springframework.http.client.MultipartBodyBuilder; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; /** * * 通过WebClient调用Http接口 * */ public class WebClientCase { /** * GET请求 */ public static void get() { String requestPath = "http://localhost:8080/demo/httptest/getUser?userId=1000&userName=李白"; WebClient webClient = WebClient.create(); Mono<String> mono = webClient.get().uri(requestPath).retrieve().bodyToMono(String.class); //同步方式 System.out.println("get block返回结果:" + mono.block()); //异步方式 final CountDownLatch latch = new CountDownLatch(5); for (int i = 0; i < 5; i++) { requestPath = "http://localhost:8080/demo/httptest/getUser?userId=1000&userName=李白" + i; mono = webClient.get().uri(requestPath).retrieve().bodyToMono(String.class); mono.subscribe(new Consumer<String>() { @Override public void accept(String s) { latch.countDown(); System.out.println("get subscribe返回结果:" + s); } }); } try { latch.await(); } catch (Exception e) { e.printStackTrace(); } } /** * POST请求(发送键值对数据) */ public static void post() { String requestPath = "http://localhost:8080/demo/httptest/getUser"; WebClient webClient = WebClient.create(); MultiValueMap<String, String> map = new LinkedMultiValueMap <String, String>(); map.add("userId", "1000"); map.add("userName", "李白"); Mono<String> mono = webClient.post().uri(requestPath).bodyValue(map).retrieve().bodyToMono(String.class); System.out.println("post返回结果:" + mono.block()); } /** * POST请求(发送json数据) */ public static void post2() { String requestPath = "http://localhost:8080/demo/httptest/addUser"; WebClient webClient = WebClient.create(); String param = "{\"userId\": \"1001\",\"userName\":\"杜甫\"}"; Mono<String> mono = webClient.post().uri(requestPath).contentType(MediaType.APPLICATION_JSON).bodyValue(param) .retrieve().bodyToMono(String.class); System.out.println("post json返回结果:" + mono.block()); } /** * 上传文件 */ public static void upload() { String requestPath = "http://localhost:8080/demo/httptest/upload"; WebClient webClient = WebClient.create(); Mono<String> mono = webClient.post().uri(requestPath).contentType(MediaType.APPLICATION_OCTET_STREAM) .bodyValue(new FileSystemResource("d:/a.jpg")).retrieve().bodyToMono(String.class); System.out.println("upload返回结果:" + mono.block()); } /** * 上传文件及发送键值对数据 */ public static void mulit() { String requestPath = "http://localhost:8080/demo/httptest/multi"; WebClient webClient = WebClient.create(); MultipartBodyBuilder builder = new MultipartBodyBuilder(); builder.part("param1", "参数1"); builder.part("param2", "参数2"); builder.part("file", new FileSystemResource("d:/a.jpg")); MultiValueMap<String, HttpEntity<?>> parts = builder.build(); Mono<String> mono = webClient.post().uri(requestPath) .bodyValue(parts).retrieve().bodyToMono(String.class); System.out.println("mulit返回结果:" + mono.block()); } public static void main(String[] args) { get(); post(); post2(); upload(); mulit(); } }View Code
原文链接:https://www.cnblogs.com/wuyongyin/p/11959240.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash