class Test{
public Mono<ServerResponse> test(ServerRequest req){
Mono<String> data = Mono.just("test");
System.out.print(data);
return ServerResponse.ok.body(data, String.class);
}
}当客户端发出请求时,在第4行打印"MonoJust“,但在Http响应主体中返回"test”。我知道发布者不会在订阅之前产生数据,那么为什么Http响应包含"test“而不是"MonoJust"?
发布于 2021-11-04 11:24:24
这种行为可能看起来有点奇怪,因为您刚刚使用Mono包装了一个实际值-但这不是reactor (和一般的反应式框架)设计的目的。
请记住,Mono是一个发布者,将来可能会也可能不会发出元素,而不仅仅是给定值的包装器。当您返回ServerResponse.ok.body()时,您显式地声明您希望主体包含您要传递的发布者发出的结果-该方法然后返回另一个发布者Mono<ServerResponse>,当您的data发布者发出一个值时,该发布者发布所需的服务器响应。
另一方面,System.out.print隐式地调用Mono上的toString()方法,该方法现在需要产生一个值,而不需要阻塞或等待(毕竟它返回的是String,而不是Mono<String>)。它不能打印这个值,因为它不一定在那里,所以它只打印它的类名(本例中的MonoJust指的是您已经用Mono.just()实例化了Mono )。
https://stackoverflow.com/questions/69835490
复制相似问题