当前位置: 首页 > 知识库问答 >
问题:

为什么从webflux路由器的处理函数传递Mono而不是Flux

钱毅
2023-03-14

我是新来的Spring。我试图以函数的方式为SpringWebFlux制作一个示例应用程序。为什么我们的处理函数不能传递通量。是否有任何方法可以让路由器函数接受它,因为据说路由器函数接受服务器响应的子类型。

显示处理程序代码

 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); }

这里,我正在通过单声道

路由器功能代码

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

所以有没有办法做到这一点,我已经阅读了不同的文章。我只能找到Mono,但如果我使用基于注释的webflux,我可以传递flux。

共有1个答案

暴向笛
2023-03-14

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

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

您可以在webflux文档中阅读所有相关内容:

HTTP与Websockets

 类似资料: