gpt4 book ai didi

spring - 如何使用 Spring Boot WebClient 收集分页 API 响应?

转载 作者:行者123 更新时间:2023-12-04 18:00:58 27 4
gpt4 key购买 nike

我有一个来自 URL 的分页响应,我想继续点击从上一个响应中获得的下一页 URL,并继续收集项目,直到我的响应中没有“nextPage”URL。如何使用来自 WebFlux 的 Spring Boot WebClient 以无阻塞的 react 方式实现这一点?

Request1: 

GET /items
response:
{
items: [...]
nextPage: "/items?page=2"
}


Request2:

GET /items?page=2
response:
{
items: [...]
nextPage: "/items?page=3"
}


Request3:

GET /items?page=3
response:
{
items: [...]
nextPage: null
}

在这里,我创建了模拟网址
https://karthikdivi.com/apps/paginatedReviews/withNextPageTokens/items
https://karthikdivi.com/apps/paginatedReviews/withNextPageTokens/items?page=2
https://karthikdivi.com/apps/paginatedReviews/withNextPageTokens/items?page=3

如何以无阻塞的 react 方式从上述响应中提取所有项目?

最佳答案

使用expand,这可以实现。
基于您提供的模拟网址。

public Mono<List<Item>> getItems() {
String url = "https://karthikdivi.com/apps/paginatedReviews/withNextPageTokens/items";

return fetchItems(url).expand(response -> {
if (response.getNextPage() == null) {
return Mono.empty();
}
return fetchItems(response.getNextPage());
}).flatMap(response -> Flux.fromIterable(response.getItems())).collectList();
}

private Mono<Response> fetchItems(String url) {

return client.get().uri(url).retrieve()
.bodyToMono(Response.class);
}

关于spring - 如何使用 Spring Boot WebClient 收集分页 API 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53274568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com