1

我尝试使用 webclient 非阻塞方法验证验证码响应。所以它可以工作,但我需要我的方法返回布尔值而不是异常。我如何从订阅中返回值?

        webClient
                .post()
                .uri(verifyUri)
                .exchange()
                .flatMap(res -> res.bodyToMono(GoogleResponse.class))
                .doOnError(e -> log.error("Request error"))
                .subscribe(GoogleResponse -> {
                    try {
                        log.debug("Google response: {}", GoogleResponse);
                        if (!GoogleResponse.isSuccess()) {
                            throw new ReCaptchaInvalidException("reCaptcha response is not valid");
                        }
                    } catch (ReCaptchaInvalidException e) {
                        throw new ReCaptchaUnavailableException("Registration unavailable at this time.  Please try again later.", e);
                    }
                });
4

1 回答 1

4

首先,您是在编写Webflux应用程序还是只是WebClient在 Spring Web 应用程序中使用而不是RestTemplate.

如果WebClient在常规 Spring Web 应用程序中使用,您只需调用线程Block()获取WebClient数据块,直到接收到数据,然后为您返回数据。

如果WebClientWebflux应用程序中使用,您应该返回MonoFlux全部返回给调用客户端,因为调用客户端是订阅者。客户端(比如 React 应用程序、Angular 应用程序或其他)订阅您的 Spring 应用程序。您的 spring 应用程序反过来订阅其他内容,然后将数据转发给原始订阅者。

您没有说明您正在编写什么样的应用程序,并且您的代码有点模糊,这反过来意味着答案也是模糊的。

于 2019-08-01T00:37:59.883 回答