Spring WebFlux - 如何从流中间返回响应?

问题描述 投票:0回答:1

我正在尝试处理这样的场景:我想从流的中间(mono/flux)返回,并根据某些谓词(条件)提供一些默认响应。例如:

end-result = flux
.step1()
.step2(some predicate -> return some dummy end-result from here and skip further execution)
.step3()
.step4(//returns end-result);

我无法找到这样做的方法,因为 WebFlux 本质上是一个管道,无论我在第 2 步中做什么都是第 3 步的提要,我无法避免它进一步发展。

我知道有一些方法可以使用 flatMap(obj -> some-predicate(obj)) 以 if-else 方式编写代码,但我正在寻找开箱即用并以功能方式工作的东西。

functional-programming spring-webflux
1个回答
0
投票

您需要添加“text/event-stream”内容类型并使用

Flux
generate()
create()
返回
from()
,如下所示,具体取决于您的逻辑。
state
可能是你的状态机逻辑的一个状态:

@GetMapping(produces = "text/event-stream")
public Flux<String> getTime() {
    return Flux.generate(LocalDateTime::now, (state, sink) -> {
        sink.next(LocalDateTime.now().toString());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (LocalDateTime.now().isAfter(state.plusSeconds(10))) {
            sink.complete();
        }
        return state;
    });
}

此代码将每秒在浏览器中打印时间戳,而无需等到整个

Flux
完成。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.