webclient retrieve() vs exchangeToMono() 对这个用例没有任何作用
webclient retrieve() vs exchangeToMono() nothing working for this use case
API(将其命名为 api-1)具有以下 属性 -
- 对于 2XX 它可以 return body
- 对于 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();
API(将其命名为 api-1)具有以下 属性 -
- 对于 2XX 它可以 return body
- 对于 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();