首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Webflux HttpResponse

Spring Webflux HttpResponse
EN

Stack Overflow用户
提问于 2021-11-04 07:09:03
回答 1查看 99关注 0票数 1
代码语言:javascript
复制
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"?

EN

回答 1

Stack Overflow用户

发布于 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 )。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69835490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档