webclient retrieve() vs exchangeToMono() 对这个用例没有任何作用

webclient retrieve() vs exchangeToMono() nothing working for this use case

API(将其命名为 api-1)具有以下 属性 -

  1. 对于 2XX 它可以 return body
  2. 对于 5XX,它不会 return body

在另一个API(api-2)中,我们的要求是if api-1 status code is 2XX return “ABC” else return 来自 webclient 调用的“XYZ”,所以我们不想在任何一种情况下消耗响应 body。

retrieve() 或 exchangeToMono() 哪个应该起作用?

当我使用 retrieve() 时,我无法 return 基于 http 响应的 ABC 或 XYZ。如果我使用 exchangeToMono(),我将收到 InvalidStateException 并显示以下消息“底层 HTTP 客户端已完成但未发出响应。”

感谢任何帮助。

这是我的方法。

String result = client
        .get()
        .uri("http://localhost:8080/endpoint")
        .retrieve()
        .toBodilessEntity()
        .onErrorResume(WebClientResponseException.class, e -> Mono.just(ResponseEntity.status(e.getStatusCode()).build()))
        .map(entity -> entity.getStatusCode().isError() ? "error" : "ok")
        .block();

result当请求成功完成时等于ok,否则error

如果您想 return error 仅在 5xx 例外情况下,您可以更改 map 中的条件。

编辑: 或者正如 Toerktumlare 在他的评论中提到的那样,您可以使用 onStatus 来省略异常。

String result = client
        .get()
        .uri("http://localhost:8080/endpoint")
        .retrieve()
        .onStatus(HttpStatus::isError, e -> Mono.empty())
        .toBodilessEntity()
        .map(entity -> entity.getStatusCode().isError() ? "error" : "ok")
        .block();