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 "正在进行网路请求。。。";
}
}
网友评论