【问题标题】:Spring 5 Web Reactive - Web Client - Use of flatmap() on the response streamSpring 5 Web Reactive - Web Client - 在响应流上使用 flatmap()
【发布时间】:2017-07-25 04:53:19
【问题描述】:

我试图了解为什么在response 流上使用 flatmap(),例如在this 帖子中(直接从参考中复制粘贴)

final ClientRequest request = ClientRequest.GET(url)
        .accept(MediaType.TEXT_EVENT_STREAM).build();
Flux<Alert> alerts = webClient.exchange(request)
        .flatMap(response -> response.bodyToFlux(Alert.class));

AFAIK,flatmap 应用于流会为每个输入值(在流中)生成任意数量的值 (0...n)。所以一个平面图需要一个产生流的函数。

通量发出 0 个或多个项目,然后可选地完成或出错。

那么响应流到底发生了什么?这是获取响应流并发出 0 个或多个 Alert 类对象的函数吗?因此,如果我们将 subscribealerts,我们可以通过 Web 客户端以反应方式获取它们。有人可以澄清我是否正确吗?

【问题讨论】:

    标签: spring reactive-programming project-reactor spring-webflux


    【解决方案1】:

    是的,这是正确的。标头的接收是第一个异步阶段,此时您会收到响应。然后使用flatMap 异步检索正文。所说的主体是Flux,因为在某些情况下您可以获得多个未编组的对象(例如 SSE)。在这里你可能只会得到一个Alert

    【讨论】:

    • 鉴于 WebClient.ResponseSpec 提供了 bodyToFlux 方法,似乎不再需要 flatMap。这对我来说非常清楚。但是,我仍然不明白为什么首先需要 flatMap。如果我们期待一个警报流,完美匹配flux,为什么还需要flatMap呢?我在这里看不到“溪流”。你能帮帮我吗?
    • 我认为你是对的,因此对原帖进行了更正。溪流……不是它应该的样子。现在情况已经好很多了。我认为这只是一个过时的例子。
    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2018-09-04
    • 2018-07-05
    • 2018-09-13
    相关资源
    最近更新 更多