程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗??

开发过程中遇到使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?的解决方法建议,希望对你解决使用 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 包含具有 SecurityContextPrincipal。 反应堆团队证实了这一点。

大佬总结

以上是大佬教程为你收集整理的使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?全部内容,希望文章能够帮你解决使用 RxJava3Adapter 返回 RxJava Single 时,无法在 WebFlux 控制器中检索主体。你能解释一下是什么破坏了反应堆链吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。