1 回答
TA贡献1812条经验 获得超5个赞
经过大量试验和错误并找到特定部分的解决方案后,我找到了适合我的解决方案。
public Flux<ItemDto> getAllItems() {
webClient.get()
.uri("/api/items?limit=1")//Used one to test
.exchange()
.expand(clientResponse -> {
List<String> links = clientResponse.headers().asHttpHeaders().getValuesAsList("LINK");
if(links.stream().anyMatch(link->link.contains("rel=\"next\""))){
for (String link : links){
if (link.contains("rel=\"next\"")){
return webClient.get()
.uri("/api/items?limit=1&" + link.substring(link.indexOf("after="), link.indexOf("&")))
.exchange();
}
}
}
return Flux.empty();
})
.flatMap(clientResponse ->
clientResponse.bodyToFlux(Map.class)
.map(ItemConverter::mapValueToItemDto));
}
不需要任何递归。只是更合适地使用扩展。现在,其中的一部分(见下文)实际上可以分解成自己的方法,但由于它只有几行,我选择不这样做。
webClient.get()
.uri("/api/items?limit=1" + after)//This after bit would be like what was passed as an argument before
.exchange();
添加回答
举报
