繁体   English   中英

为什么要通过 Mono<ServerResponse> 来自 webflux 路由器中的处理程序函数而不是 Flux<ServerResponse>

[英]Why pass Mono<ServerResponse> from handler function in webflux router and not Flux<ServerResponse>

我是春天的新手。 我试图以功能方式为 spring webflux 制作一个示例应用程序。 为什么我们的处理函数不能通过 Flux。 有什么方法可以让路由器功能接受它,因为据说路由器功能接受 serverResponse 的子类型。

显示处理程序代码

 public Mono<ServerResponse> getShowList(ServerRequest request){
            Flux<Show> showList = showRepository.findAll();
            Flux<ShowVo> showVoList= showList.map(s -> {
                return new ShowVo(s.getId(), s.getTitle());     
        });
    return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(showVoList, ShowVo.class); }

在这里,我将 Mono <ServerResponse> 传递给 Router 函数,但我希望将它作为 Flux <ServerResponse>

路由器功能码

 @Bean
    public RouterFunction<ServerResponse> routeShow(ShowHandler showHandler){
            return RouterFunctions.route(RequestPredicates.GET("/shows").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), showHandler::getShowList)
    
    }
    }

那么有什么办法可以做到,我已经浏览了不同的文章。 我能找到的只是 Mono 但如果我使用基于注释的 webflux 我可以通过通量。

为什么 webhandler 不接受到服务器的流,而您只能返回流是因为 HTTP 协议规范。

如果您希望将数据流式传输到服务器,并将数据流式传输到客户端(全双工),则需要将 websockets 与 webflux 结合使用。

您可以在 webflux 文档中阅读所有相关信息:

HTTP 与 Websockets

暂无
暂无

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

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