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