簡體   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