【问题标题】:Why pass Mono<ServerResponse> from handler function in webflux router and not Flux<ServerResponse>为什么从 webflux 路由器中的处理函数传递 Mono<ServerResponse> 而不是 Flux<ServerResponse>
【发布时间】:2020-12-16 11:21:37
【问题描述】:

我是 Spring 新手。我试图以功能的方式为 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 但我想将它作为 Flux 传递给路由器功能

路由器功能代码

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

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

【问题讨论】:

  • 您的意思是要将数据流式传输到服务器,全双工?
  • 其实我的意思是说。我想将数据流数据发送到服务器。就像我们想从服务器或数据库中以流的形式获取数据一样。就像我们收到推文一样。它是通量响应的一种形式?

标签: java functional-programming spring-webflux


【解决方案1】:

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

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

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

HTTP versus Websockets

【讨论】:

  • 好的。谢谢。我将尝试对这个主题有一个清晰的了解。我已经编辑了我的问题。请你看一次好吗。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2021-09-09
  • 1970-01-01
  • 2019-04-04
  • 2018-10-11
  • 2020-06-13
相关资源
最近更新 更多