将 API 响应限制为 100,并对其进行迭代,直到响应结束

问题描述

我有一个 API,它将提供超过 100 个 id 作为响应,但我需要将此响应作为主体传递给另一个 API,在那里它只需要 100 个 id 作为请求主体,我需要拆分这些响应并发送将其分批发送到另一个 API,任何人都可以帮我将这些响应拆分为 100 个并将其发送给另一个

服务类-

Workspaces workspace = new Workspaces(mw);
Flux<Workspaces> modifiedWorkspace = webClient.post().uri(URIDetails.MODIFIEDWORKSPACE)
.header("Authorization",bearerToken).body(Mono.just(mw),Workspaces.class).retrieve()
.bodyToFlux(Workspaces.class);
modifiedWorkspace.doOnNext(System.out::println).blockLast();
return null;

工作区模型-

public class Workspaces {
private List<String> workspaces;
}

调用-

Flux<ScanIDModel> modifiedWorkspaces;
final List<String> mw = new ArrayList<>();
for (Workspace w : modifiedWorkspaces) {
mw.add(w.getId());
}
modifiedWorkspaces = scanRespone(mw);

JSON 正文:

{
"workspaces": [
"6eret123","b129078v","ngy66553","erfc1153"
]
}

我如何迭代它并在此处拆分响应。请帮我解决这个问题。 提前致谢

解决方法

我认为对于您的用例,最好的选择是使用窗口操作。 https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#window-java.time.Duration- 此运算符将每 n 个项目打开一个新通量,在您的情况下每 100 个项目打开一个新通量,然后您可以将此新通量发送到另一个 API。 此代码的一个示例是:

  modifiedWorkspace
        .window(100)
        .doOnNext(flux -> Webclient.post().uri(anotheruri).body(flux))
        .subscribe();
,

Flux 有一个方法 https://cogitas.net/creating-flavors-of-a-flutter-app/,它会从 Flux 收集元素直到最大大小并返回一个 Flux<List>,然后您可以在下一个 API 中使用它。例如

Flux.just(1,2,3,4,5,6)
    .buffer(2)
    .flatMap(list -> /* List of 2 elements each*/ webClient.post().uri(uri).body(list).retrieve())
    .subscribe()

另一个选项是 buffer(int maxSize),如果元素需要更长时间才能饱和,它不会停止您的管道。