首页 > 解决方案 > Mono::then 返回 null

问题描述

我对反应式编程比较陌生。我的问题是关于Mono::then

我想要做的是,从传入的请求中提取正文,将其设置为静态变量。完成后,发送一个响应,说明服务已启动。但是下面的代码总是返回“Service started for: null”。

我认为Mono::then应该在第一个单声道完成后运行(在这种情况下,在设置静态变量之后)并返回“服务启动:a,b,c”。

我的理解错了吗?

(此外,感谢任何代码批评)

public Mono<ServerResponse> getStatus(ServerRequest req) {
        Mono<List<Request>> body = req.bodyToFlux(Request.class).collectList();
        return ServerResponse.ok()
                .body(body.doOnNext(i -> {
                    Service.a = i;
                    logger.info("Service started for : {}", i.toString());
                })


                        .then(Mono.just("Service started for: " + Service.a)), String.class);
    }

标签: javareactive-programmingspring-webfluxproject-reactor

解决方案


非常不鼓励通过静态变量进行通信(尤其是在函数式和反应式编程中)。在您的问题中,您没有提供有关Service您开始的足够信息,因此很难推荐。

但是,根据现有信息,我将从以下内容开始:

public Mono<ServerResponse> getStatus(ServerRequest req) {
    return req.bodyToFlux(Request.class)
            .collectList()
            .doOnNext(requestBody -> System.out.println("Do your service start here in the background."))
            .flatMap(requestBody -> ServerResponse.ok().syncBody("Service started for: " + requestBody));
}

推荐阅读