美文网首页
SpringBoot网络请求WebClient

SpringBoot网络请求WebClient

作者: Hiper | 来源:发表于2022-09-22 22:11 被阅读0次

    WebClient是RestTemplete的替代品,有更好的响应式能力,支持异步调用,可以在Springboot项目中实现网络请求。
    pom.xml中添加以下依赖

    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    

    一个快速上手示例

    @RestController
    public class TestController {
    
        @GetMapping("/data")
        public Student getDefaultDate() throws InterruptedException {
            Thread.sleep(1000L);
            return new Student();
        }
    
        //方式一,直接调用create()方法
        @GetMapping("/test1")
        public String test1() {
            WebClient webClient = WebClient.create();
            Mono<String> mono = webClient
                    .get() // GET 请求
                    .uri("http://localhost:8080/data")  // 请求路径
                    .retrieve() // 获取响应体
                    .bodyToMono(String.class); //响应数据类型转换
            return "from test1 " + mono.block();
        }
    
        //方式二,调用builder()方法进行创建,可以自定义标头,基础链接
        @GetMapping("/test2")
        public Student test2() {
            WebClient webClient = WebClient.builder()
                    .baseUrl("http://localhost:8080")
                    .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<Student> mono = webClient
                    .get() // GET 请求
                    .uri("/data")  // 请求路径
                    .retrieve() // 获取响应体
                    .bodyToMono(Student.class); //响应数据类型转换
            Student student = mono.block();
            student.setDesc("From test2");
            return student;
        }
    
        //支持异步调用的方式
        @GetMapping("/test3")
        public String test3() {
            WebClient webClient = WebClient.builder()
                    .baseUrl("http://localhost:8080")
                    .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<Student> mono = webClient
                    .get() // GET 请求
                    .uri("/data")  // 请求路径
                    .retrieve() // 获取响应体
                    .bodyToMono(Student.class); //响应数据类型转换
            mono.subscribe(result -> {
                System.out.println(result);
            });
            return "正在进行网路请求。。。";
        }
    }
    
    

    相关文章

      网友评论

          本文标题:SpringBoot网络请求WebClient

          本文链接:https://www.haomeiwen.com/subject/vndgortx.html