java - 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);
}
解决方案
非常不鼓励通过静态变量进行通信(尤其是在函数式和反应式编程中)。在您的问题中,您没有提供有关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));
}
推荐阅读
- python - 如何在 Python 中求解矩阵值 ODE?
- php - PHP 问题将 file_put_contents 替换为 fopen fwrite fclose 并读取
- c# - unity c#,无法从另一个脚本访问变量
- amazon-web-services - 在使用 aws s3 失败后重试重新下载
- reactjs - useContext 不适用于嵌套组件
- android - 同一活动中不同可组合功能的不同视图模型
- bash - 查找具有给定名称的目录的路径
- c - 当使用 SIGINT 之类的信号中断 C 程序时会发生什么?
- mysql - mysql如何捕捉更新语句是否执行成功
- java - JPMS ServiceLoader 无法按预期为我工作