gpt4 book ai didi

java - 如何在 Spring Flux 错误处理程序中访问引用源对象?

转载 作者:行者123 更新时间:2023-12-02 01:39:40 24 4
gpt4 key购买 nike

我有一个阻止网络请求的列表,如 List<Mono>我想同时执行。

以下内容通常有效,但是:当发生异常时,我想收集分配给导致异常的请求的映射中的所有错误。

List<Request> bodies;
List<Mono<Response>> monos = requests.stream().map(bodies -> prepareMono(body)).collect(Collectors.toList());

Map<Request, Throwable> errors = new HashMap<>();

List<Response> results = Flux.merge(monos).collectList().onErrorContinue((ex, value) -> {
//TODO how can I access the <Request> here who caused the exception
errors.put(<request>, ex);
}).block();

private Mono<Response> prepareMono(Object body) {
return webClient.post().syncBody(body).retrieve().bodyToMono(Response.class);
}

问题:如何访问我在错误处理程序中发送的请求正文?

最佳答案

你可以尝试这样的事情:

Flux.fromIterable(requests)
.flatMap(request -> execute(request))
.doOnNext(result -> {
if (result.throwable != null)
{
Request request = result.request;
Throwable throwable = result.throwable;
// do something
}
});

private Mono<Result> execute(Request request)
{
return WEB_CLIENT.post().syncBody(request).retrieve()
.bodyToMono(Response.class)
.map(response -> new Result(request, response, null))
.onErrorResume(e -> Mono.just(new Result(request, null, e)));
}

private class Result
{
private Request request;
private Response response;
private Throwable throwable;

private Result(Request request, Response response, Throwable throwable)
{
this.request = request;
this.response = response;
this.throwable = throwable;
}
}

不过,在 react 链之外的映射中收集请求错误是相当难看的。

关于java - 如何在 Spring Flux 错误处理程序中访问引用源对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496008/

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