使用Spring Reactor和Spring Boot时如何将Flux作为响应返回?

时间:2017-05-31 09:31:12

标签: spring-boot project-reactor

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

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

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

我想将值返回到web层中的控制器。但是,我没有看到json响应中的值返回。

当我从浏览器调用http://localhost:8080时,我会得到回复, { “预取”: - 1}

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

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

能否帮助我找到正确的方法。

1 个答案:

答案 0 :(得分:4)

使用Reactor的完全反应支持仅在Spring 5(当前处于RC阶段)和Spring Boot 2(目前处于里程碑阶段)中实现。

可以独立于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;