Skip to main content
 首页 » 编程设计

spring-boot之使用 Spring Reactor 和 Spring Boot 时如何返回 Flux 作为响应

2024年05月29日106zhujiabin

我正在尝试将 Spring Reactor 与我的 Spring Boot 应用程序一起使用。

我正在使用Project Reactor 3.0.7.RELEASE和 Spring Boot 1.5.3.RELEASE。

我的 Service 类中有一个返回 Flux 的方法。

我想将值返回给Web层的 Controller 。但是,我没有看到 json 响应中返回的值。

当我调用http://localhost:8080时从浏览器,我得到的响应是, {“预取”:-1}

我不确定在返回响应之前是否应该进行从 Flux 到 String 的转换。

我的代码在 中共享, https://github.com/bsridhar123/spring-reactor-demo/blob/master/src/main/java/com/demo/reactor/ReactiveApp.java

您能帮我找到正确的方法吗?

请您参考如下方法:

使用 Reactor 的完全响应式支持仅在 Spring 5(当前处于 RC 阶段)和 Spring Boot 2(当前处于 Milestone 阶段)中实现。

可以独立于 Spring 使用 Reactor,但这不会使框架变得响应式和异步,因此您会失去一些好处。您不能简单地返回Flux,因为框架尚不理解这种类型。

但是,如果您必须编排大量服务调用,我相信它在服务层中仍然有用。

在这种情况下,您可以做的是在整个服务层中使用 FluxMono 并将它们转换为 Spring 4 的 DeferredResult。像这样的东西:

DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(); 
service.getSomeStringMono() 
       .map(n -> ResponseEntity.ok(n)) 
       .defaultIfEmpty(ResponseEntity.notFound().build() 
       .subscribe(re -> result.setResult(re), 
                  error -> result.setErrorResult(error)); 
return result;