SpringBoot网络请求WebClient

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


      org.springframework.boot
      spring-boot-starter-webflux

一个快速上手示例

@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 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 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 mono = webClient
                .get() // GET 请求
                .uri("/data")  // 请求路径
                .retrieve() // 获取响应体
                .bodyToMono(Student.class); //响应数据类型转换
        mono.subscribe(result -> {
            System.out.println(result);
        });
        return "正在进行网路请求。。。";
    }
}

你可能感兴趣的:(SpringBoot网络请求WebClient)