如何在SpringWebClient中访问响应主体?

enyaitl3  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(339)

我有一个 WebClient 利用重试:

webClient.retryWhen(
   Retry.backoff(3, Duration.ofSeconds(3)).filter(this::isRetryable)
)

private boolean isRetryable(Throwable throwable) {
    //TODO how access the json body?
}

问题:在重试期间如何评估json响应主体?因为我不仅要基于状态代码,还要基于返回的错误内容来做出决定。

uujelgoq

uujelgoq1#

我猜你用的是 retrieve() 方法,如果状态代码发出错误信号,它将始终引发异常。你可能想用 exchangeToMono() 相反,它不会在非2xx状态代码上引发异常,而是为您提供响应以执行您所希望的操作:

WebClient.create("http://my-endpoint.abc/endpoint")
        .get()
        .exchangeToMono(cr -> cr.bodyToMono(String.class).map(body -> {
            //return `Mono.error()` here if invalid - you have access to both body + statuscode (via cr.statusCode())
        })).retryWhen(
            Retry.backoff(3, Duration.ofSeconds(3)).filter(e -> e instanceof ExceptionThrownAbove)
        );

相关问题