下面是“Spring WebClient实战示例”的完整攻略。
1. 简介
在进行网络请求时,一般使用的是Java内置的HttpURLConnection或Apache Http Client等标准库或第三方库。根据微服务和云原生的发展,Spring5提供了新的WebClient来进行HTTP RESTful请求,同时支持响应式API。
2. WebClient使用步骤
2.1 添加webflux依赖
在您的Spring Boot项目的pom.xml文件中添加webflux依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
2.2 使用WebClient发送请求
2.2.1 发送GET请求
WebClient webClient = WebClient.create();
Mono<String> result = webClient.get()
.uri("https://www.baidu.com/s?wd=java")
.retrieve()
.bodyToMono(String.class);
result.subscribe(System.out::println);
以上代码使用WebClient发送了一个GET请求,请求了百度搜索引擎上的Java关键字,获取页面内容并输出到控制台。
2.2.2 发送POST请求
WebClient webClient = WebClient.create();
Mono<String> result = webClient.post()
.uri("http://localhost:8080/api/user")
.body(BodyInserters.fromValue("{\"name\":\"Lucy\",\"age\":20}"))
.retrieve()
.bodyToMono(String.class);
result.subscribe(System.out::println);
以上代码使用WebClient发送了一个POST请求,请求了本地的api/user接口,将请求体设置为JSON格式的{"name":"Lucy","age":20},获取响应内容并输出到控制台。
3. 示例应用
我们创建一个简单的Spring Boot项目,用WebClient向百度地图API发送请求,通过获取到的数据显示城市名称和天气情况。
3.1 添加依赖和配置
在您的Spring Boot项目的pom.xml文件中添加webflux、lombok和json依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
配置文件application.yml:
baidu:
map:
api:
key: xxxxxxxxxxxxxxxx
url: http://api.map.baidu.com/weather/v1/
3.2 创建实体类
创建Weather类,用于接收解析百度地图API的响应体,并提供城市名称和天气情况的getter方法,使用@Data注解简化代码:
@Data
public class Weather {
private String city;
private String weather;
}
3.3 实现请求
创建WeatherService类,使用WebClient向百度地图API发送请求,将响应体解析为Weather对象并返回。其中使用@Value注解注入配置文件中的api key和url,使用lombok简化代码操作:
@Service
public class WeatherService {
private WebClient webClient;
private String apiKey;
private String apiUrl;
public WeatherService(WebClient.Builder webClientBuilder,
@Value("${baidu.map.api.key}") String apiKey,
@Value("${baidu.map.api.url}") String apiUrl) {
this.webClient = webClientBuilder.build();
this.apiKey = apiKey;
this.apiUrl = apiUrl;
}
public Mono<Weather> getWeather(String city) {
return webClient.get()
.uri(builder -> builder
.path("weather")
.queryParam("city", city)
.queryParam("ak", apiKey)
.queryParam("output", "json")
.build())
.retrieve()
.bodyToMono(Map.class)
.map(map -> new Weather(map.get("result").get("city").asText(), map.get("result").path("now").get("text").asText()));
}
}
3.4 创建控制器
创建WeatherController类,用于接收前端传来的城市名称,并将城市名称和天气情况通过JSON格式返回给前端。其中使用@Autowired注解注入WeatherService,并用@RestController注解标记为RESTful控制器:
@RestController
public class WeatherController {
@Autowired
private WeatherService weatherService;
@GetMapping("/weather")
public Mono<Weather> getWeather(@RequestParam String city) {
return weatherService.getWeather(city);
}
}
至此,我们已经完成了向百度地图API发送请求,解析响应并将城市名称和天气情况返回给前端的操作。
总结
Spring WebClient提供了一种新的方式来进行HTTP RESTful请求,支持响应式API,也更方便地使用了更多的Java 8特性和Spring Boot的优点。在实际开发过程中,如果我们需要开发一个高并发、低延迟的RESTful服务,那么使用WebClient将是一个不错的选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring WebClient实战示例 - Python技术站