React 前端导航

基于WebClient的网络调用的使用

1. 与RestTemplate相比WebClient的优势

  1. 非阻塞,支持更改的并发能力请求
  2. 能够支持同步和异步的方式
  3. 在Java8的代码中能够使用lambadas的箭头函数
  4. RestTemplate 不适合在非阻塞应用程序中使用,因此 Spring WebFlux 应用程序应始终使用 WebClient。在大多数高并发场景中,WebClient 也应该是 Spring MVC 中的首选,并且用于编写一系列远程,相互依赖的调用。

2.直接上代码

  1. 在pom文件中引入jar
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

3.创建 WebClient 实例

    1. 利用 create() 创建,可以在create中协商IP或是域名,在下面的uri写完整的路径或是uri的路径
        /**
         * 阻塞
         * http://localhost:8001/webClient/getData
         */
        @GetMapping("getData")
        public void getData() {
            WebClient webClient = WebClient.create();
            Mono<String> stringMono = webClient
                    .get()  //请求类型
                    .uri("https://api.dd16888.cn/baidu?access-key=93aa26aeb5f14819ae1c8d0865e2b69b&secret-key=1b497c79aee04758966f7127a8acd33d") //请求路径
                    .retrieve()  //获取响应体
                    .bodyToMono(String.class);//返回类型;
            log.info("获取数据:{}",stringMono.block());
        }
    
    1. 预先构建域名的访问地址
        /**
         * 阻塞
         * http://localhost:8001/webClient/getData1
         */
        @GetMapping("getData1")
        public void getData1() {
            WebClient webClient = WebClient.create("https://api.dd16888.cn/baidu");
            Mono<String> stringMono = webClient
                    .get()  //请求类型
                    .uri("?access-key=93aa26aeb5f14819ae1c8d0865e2b69b&secret-key=1b497c79aee04758966f7127a8acd33d") //请求路径
                    .retrieve()  //获取响应体
                    .bodyToMono(String.class);//返回类型;
            log.info("获取数据:{}",stringMono.block());
        }
    
    1. 创建请求头,利用builder构建(推荐)我们可以通过返回的 WebClient.Builder 设置一些配置参数(例如:baseUrl、header、cookie 等),然后再调用 build 就可以返回 WebClient 对象了
        /**
         * 利用 builder 创建(推荐)阻塞
         * http://localhost:8001/webClient/getData2
         */
        @GetMapping("getData2")
        public JSONObject getData2() {
            WebClient webClient = WebClient.builder()
                    .baseUrl("https://api.dd16888.cn")
                    .defaultHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)")
                    .defaultCookie("ACCESS_TOKEN", "test_token")
                    .build();
            Mono<JSONObject> stringMono = webClient
                    .get()  //请求类型
                    .uri("weibo?access-key=93aa26aeb5f14819ae1c8d0865e2b69b&secret-key=1b497c79aee04758966f7127a8acd33d") //请求路径
                    .retrieve()  //获取响应体
                    .bodyToMono(JSONObject.class);//返回类型;
            log.info("获取数据:{}",stringMono.block());
            return stringMono.block();
        }
    

    4.关于GET的请求方式

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/187
想做或者在做副业的朋友欢迎加微信交流:farmerlzj,公众号:生财空间站。

#java#webClient

相关推荐

单测报错:Transaction synchronization is not active解决办法

使用TransactionSynchronizationManager写单测报错:Transaction synchronization is not active解决办法,技术沉淀

彻底下线fastjson的依赖,Jackson替换FastJson注意事项

近几年fastjson爆出的漏洞非常多,因此可能你所在的公司会要求使用jackson替代fastjson。本文主要就作者自己最近完成fastjson替换记录的一个比较分享。