当前位置: 首页 > 知识库问答 >
问题:

WebClient使用ExchangeFilterFunctions向Mono添加处理程序

阙奇思
2023-03-14

我想知道向从ExchangeFilterFunction返回的单声道添加功能是否会应用于返回的最终单声道。基本上,我希望通过将一些关注点移出客户机类并添加到ExchangeFilterFunctions中来清理一些客户机代码,我可以将这些关注点添加到客户机中,但我的情况与单个调用有点不同。

    Flux.fromIterable(uris)
        .parallel()
        .runOn(Schedulers.parallel())
        .flatMap(uri -> webClient.get()
            .uri(uri)
            .headers(headers -> headers.addAll(httpHeaders))
            .retrieve()
            .onStatus(
                status -> status.is4xxClientError() || status.is5xxServerError(),
                response -> response.bodyToMono(String.class)
                    .map(body -> new MyCustomException(body, response.statusCode())))
            .bodyToMono(MyResponse.class)
            .map(x -> Tuple.of(x, null))                
            .onErrorMap(ReadTimeoutException.class, th ->
                new MyCustomException(ErrorResponseBuilder.buildError(th), HttpStatus.INTERNAL_SERVER_ERROR)))
        .doOnEach(this::log)
        .sequential();

共有1个答案

商同化
2023-03-14

错误处理逻辑肯定可以被分离出来,这篇Baeldung的文章对此非常有用

另外,我建议对代码进行重构,以便没有任何嵌套的映射/平面映射。这将使您的代码更具可读性,并可能使您了解哪些部分应该提取出来。本文很好地涵盖了这一点

 类似资料:
  • 我试图将多个头放入defaultHeaders()中,但我不知道如何从createHeaders()方法的返回中创建消费者对象 我可以用这种方式构建标题: 但是如何把它包装成消费者呢?

  • 要求 > 需要调用一个带有wsdl的webservice,它不会通过浏览器打开。 我有一个wsdl文档,其中给出了一个虚拟endpoint。 一旦存根类等生成,终端应该在运行时更改。 必须调用第三方方法,该方法将在SOAP消息中添加头,该方法将只接受SOAP消息,该方法必须从我们应该添加到流中的SoapHandler调用。 我已经尝试了以下所有方法 Axis 1.4服务运行良好,我可以访问SOAP

  • 我有这个单声道代码: 当validate方法抛出ValidationException时,将同时调用handleValidation异常和handleException。我只希望调用handleValidationException。为什么会发生这种情况?如何防止handleException被调用?

  • 我的程序服务提供了一些返回

  • 我在我的项目中使用微服务架构。对于服务间通信,我使用消息队列NATS。我写了一个网关,处理所有超文本传输协议请求,并将其放入队列。所有终端服务都订阅到这个队列。 在endpoint服务中,我使用基于Netty IO的Xitrum。当我从队列中得到请求时,我将其反序列化为FullHttpRequest。但我不知道如何将它发送到我的netty服务器,它可以根据业务逻辑处理它(例如,不使用可以将它发送到

  • 问题内容: 我想将一个事件处理程序添加到一个段落中,以供任何用户单击它时使用。例如,我有一个段落,当用户单击它时会显示一个警报,但是在HTML上不使用“ onclick”。 问题答案: 您可以添加事件侦听器。 嗯 像这样: 完整代码(已在Chrome&IE7中测试):