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

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

我有一个 WebClient 利用重试:

  1. webClient.retryWhen(
  2. Retry.backoff(3, Duration.ofSeconds(3)).filter(this::isRetryable)
  3. )
  4. private boolean isRetryable(Throwable throwable) {
  5. //TODO how access the json body?
  6. }

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

uujelgoq

uujelgoq1#

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

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

相关问题