Как я могу изменить получение, чтобы обменять эквивалентно? - PullRequest
0 голосов
/ 30 января 2020

У меня есть метод, похожий на этот

public Mono<SomeResponse> getSome(final SomeRequest) {
    return webClient
            .post()
            .uri(b -> ...)
            .body(fromValue(request))
            .retrieve()
            .bodyToMono(SomeResponse.class)
            ;
}

@Autowired
@SomeQualifier
private WebClient webClient;

Кажется, здорово, что мне не нужно беспокоиться о таких вещах, как неудачный код состояния и т. Д.

Теперь Я хочу проанализировать код состояния, заголовки и тело для неудачной ситуации, не меняя семантику вызывающего абонента

И я пытаюсь использовать метод exchange().

    return webClient
            .post()
            .uri(b -> ...)
            .body(fromValue(request))
            .exchange()
            .flatMap(r -> {
                final HttpStatus statusCode = r.statusCode();
                if (statusCode.series() != HttpStatus.Series.SUCCESSFUL) {
                    // TODO: log some
                    // NOW WHAT? <<<<<<<<<<<<<<<<<<<<<<<<<<
                }
                return r.bodyToMono(responseClass); // MAY ERROR WITH WRONG BODY, RIGHT?
            })
            ;

Теперь, что я должен делать с этим if блоком?

Я пытаюсь сделать с этим.

                    // Is this a proper way to throw a WebClientResponseException?
                    return Mono.create(s -> {
                        final WebClientResponseException e = r.createException().block();
                        assert e != null;
                        s.error(e);
                    });

Есть ли какой-нибудь хороший способ сделать это?

...