У меня есть метод, похожий на этот
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);
});
Есть ли какой-нибудь хороший способ сделать это?