我正在使用 webClient 调用服务 1,服务 1 调用服务 2,然后服务 2 从数据库获取数据并返回它们。问题:我有 onStatus 来捕获不良响应,因此响应带有 400 或 500 状态代码。 代码示例:
return webClient.post()
.uri('/example')
.header('someHeader')
.body(PojoBody)
.retrieve()
.onStatus(HttpStatus:isError, handleError)
.bodyToMono(ResponsePojo);
在某些边缘情况下,响应带有 200 状态代码,并且响应正文包含失败消息和失败原因。 那么我如何检索它,然后抛出带有该失败消息的异常(在其他服务返回的响应对象中)。因为它尝试映射并抛出错误。目前我收到 500 内部服务器错误。 任何帮助将不胜感激,谢谢。
onStatus
方法可让您处理特定的 HTTP 状态响应。您也可以使用它来获得成功的响应:
.onStatus(HttpStatus::is2xxSuccessful, this::handleSuccess)
.onStatus(HttpStatus::isError, this::handleError)
可能来不及响应,但错误是由于 WebClient 可以缓冲的最大限制造成的,要解决此问题,您可以更改缓冲大小,如下所示:
final size = 10*1024*1024 // 10MB
final ExchangeStrategies strategies = ExchangeStrategies.builder()
.codecs(codecs -> codecs.defaultCodecs().maxInMemory(size)).build();
WebClient.Bulder builder = WebClient.builder()
.exchangeStrategies(strategies)
.baseUrl(url));
这是一个小例子