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

Jba*_*aur 5 spring-boot project-reactor

我试图在我的Spring Boot应用程序中使用Spring Reactor.

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

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

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

当我从浏览器调用http:// localhost:8080时,我得到响应,{"prefetch": - 1}

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

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

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

Sim*_*slé 5

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

可以独立于Spring使用Reactor,但这不会使框架具有反应性和异步性,因此您会失去一些好处。您不能简单地返回a,Flux因为框架尚不了解这种类型。

但是,我认为,如果必须安排很多服务调用,它在服务层中仍然有用。

你能在这种情况下,做的是使用FluxMono整个服务层和转换那些弹簧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;
Run Code Online (Sandbox Code Playgroud)