Webclient 200 状态代码,responseBody 中出现故障

问题描述 投票:0回答:2

我正在使用 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 内部服务器错误。 任何帮助将不胜感激,谢谢。

java reactive-programming spring-webflux
2个回答
1
投票

onStatus
方法可让您处理特定的 HTTP 状态响应。您也可以使用它来获得成功的响应:

  .onStatus(HttpStatus::is2xxSuccessful, this::handleSuccess)
  .onStatus(HttpStatus::isError, this::handleError)  

0
投票

可能来不及响应,但错误是由于 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));

这是一个小例子

© www.soinside.com 2019 - 2024. All rights reserved.