大佬教程收集整理的这篇文章主要介绍了使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的 WebFlux 控制器:
import reactor.adapter.rxjava.RxJava3Adapter;
import reactor.core.publisher.Mono;
import io.reactivex.rxjava3.core.Single;
@RestController
@requestMapPing("/test")
public class MyController {
@GetMapPing("/mono")
public Mono<String> getMono(ServerWebExchange exchangE) {
return exchange.getPrincipal()
.map(principal -> principal.getname())
.switchIfEmpty(Mono.just("no principal"));
}
@GetMapPing("/single")
public Single<String> getSingle(ServerWebExchange exchangE) {
return RxJava3Adapter.monoToSingle(exchange.getPrincipal()
.map(principal -> principal.getname())
.switchIfEmpty(Mono.just("no principal")));
}
}
在上面的代码中,getMono
返回主体的名称,而 getSingle
返回“无主体”。
我试图理解为什么。它可能与 RxJava3Adapter
有关。我不确定它是否会将反应堆发布者变成“热门”发布者,因为我觉得这是一种竞争条件。
我的 Curl 命令(失败)
curl --request GET \
--url http://localhost:8080/test/single \
--header 'authorization: Bearer XXXX' \
简单的解决方案是将我们所有的 API 转换为 Reactor 类型,但这不是一件容易的事。 RxJava 类型在我们的代码中无处不在,而不仅仅是在控制器中。我们将不得不重写数百个文件。所以我想在提议走这条路之前更好地理解这一点。
我将此问题作为 issue 发布到了 reactor github 页面。我发现在 Single
情况下 Principal 丢失的原因是因为我们在跳转到 RxJava 链时丢失了 Reactor Context,它没有 Context 的概念。该 Reactor Context 包含具有 SecurityContext
的 Principal
。
反应堆团队证实了这一点。
以上是大佬教程为你收集整理的使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?全部内容,希望文章能够帮你解决使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。