如何在Spring5中从Mono的被动订阅调用私有方法并返回特定类型?

如何在Spring5中从Mono的被动订阅调用私有方法并返回特定类型?,mono,spring-webflux,Mono,Spring Webflux,我有一个main方法,其返回类型为WebClient。在这个方法中,我得到一个Mono对象,使用subscribe,我试图调用另一个返回webclient对象的方法。现在在subscribe中,我有一个webclient对象,我想返回它。我在这里被阻止了,因为我不确定如何返回对象以及将return关键字放在哪里 主要方法:- public WebClient getWebClientWithAuthorization(String t) { ----- ---- Mono<Acc

我有一个main方法,其返回类型为WebClient。在这个方法中,我得到一个Mono对象,使用subscribe,我试图调用另一个返回webclient对象的方法。现在在subscribe中,我有一个webclient对象,我想返回它。我在这里被阻止了,因为我不确定如何返回对象以及将return关键字放在哪里

主要方法:-

public WebClient getWebClientWithAuthorization(String t) {
-----
----

    Mono<AccessToken> accessToken = authenticationProvider.getUserAccessToken(serviceConnectionDetails, queryParams);

    Disposable disposable = accessToken.subscribe(
        value -> getWebClientBuilder(t, value.getAccessToken()),
        error -> error.printStackTrace(),
        () -> System.out.println("completed without a value")
    );

}
现在,在getWebClientWithAuthorization方法中,将return关键字放在subscribe内部还是外部subscribe。

考虑端到端的反应式 在我看来,在使用反应式编程的star building应用程序中,最重要的是将任何调用视为异步的,从而提供端到端异步和非阻塞通信

因此,我建议您以以下方式提供而不是同步a型单声道:

public Mono<WebClient> getWebClientWithAuthorization(String t) {
-----
----

    Mono<AccessToken> accessToken = authenticationProvider.getUserAccessToken(serviceConnectionDetails, queryParams);

    return accessToken.map(value -> getWebClientBuilder(t, value.getAccessToken()))
                      .doOnError(error -> error.printStackTrace())
                      .doOnComplete(() -> System.out.println("completed without a value"))
    );

}
请记住,如果假设异步通信,只需继续流程并在任何地方指定反应类型即可。在您遇到某个网络边界或流的某个逻辑端(您不必返回某些内容)之前,订阅源代码是没有意义的

public Mono<WebClient> getWebClientWithAuthorization(String t) {
-----
----

    Mono<AccessToken> accessToken = authenticationProvider.getUserAccessToken(serviceConnectionDetails, queryParams);

    return accessToken.map(value -> getWebClientBuilder(t, value.getAccessToken()))
                      .doOnError(error -> error.printStackTrace())
                      .doOnComplete(() -> System.out.println("completed without a value"))
    );

}
getWebClientWithAuthorization("some magic string here")
        .flatMapMany(webClient -> webClient.get()
                                       .uri("some uri here")
                                       .retrieve()
                                       .bodyToFlux(MessageResponse.class))
        // operate with downstream items somehow
        // .map
        // .filter
        // .etc
        // and return Mono or Flux again to just continue the flow