繁体   English   中英

Reactor SubscriberContext 不适用于 ServerRequest 正文

[英]Reactor SubscriberContext not working for ServerRequest Body

当我们尝试从服务器请求正文设置上下文时,我们无法提取服务器请求正文。 当我们设置 POJO 时,我们能够从上下文中检索 object


  public Mono<ServerResponse> processuser(ServerRequest serverRequest) {
  
    return serverRequest
        .bodyToMono(FederationUserRequest.class)
        .flatMap(
            federationUserRequest ->
                Mono.subscriberContext()
                    .flatMap(ctx -> ctx.get("fed"))
                    //when we set the context from serverRequest it doesn't reach the next flatpMap
                    //when we set the context from Mono.just(new FederationUserRequest()) it works.
                    .flatMap(fur -> ServerResponse.ok().bodyValue(Mono.just("data")))
        .subscriberContext(ctx -> ctx.put("fed", getRequestBody(serverRequest)));
  }

  private Mono<FederationUserRequest> getRequestBody(ServerRequest serverRequest) {
 
    Mono<FederationUserRequest> req = Mono.just(serverRequest.bodyToMono(FederationUserRequest.class);
    return Mono.just(new FederationUserRequest()); -> Works, adds to context as MonoLiftFusable
    return req; -> Does not Work, adds to context as MonoLift
  }

这个问题很简单。 它一直盯着我看。 当我们调用

return serverRequest
        .bodyToMono(FederationUserRequest.class)

subscribe() 被隐式调用..

我们试图打电话

    Mono<FederationUserRequest> req = Mono.just(serverRequest.bodyToMono(FederationUserRequest.class);

再次基本上是完成订户。

代码应该是

 public Mono<ServerResponse> processuser(ServerRequest serverRequest) {
  Context context = Context.of("fed", Mono.just(serverRequest.bodyToMono(FederationUserRequest.class));


    return Mono.subscriberContext(ctx -> ctx.get("fed"))
        .flatMap(
            federationUserRequest ->
                Mono.subscriberContext()
                    .flatMap(ctx -> ctx.get("fed"))
                    .flatMap(fur -> ServerResponse.ok().bodyValue(Mono.just("data")))
        .subscriberContext(context);
  }
 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM