我正在尝试将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。
能否帮助我找到正确的方法。
答案 0 :(得分:4)
使用Reactor的完全反应支持仅在Spring 5(当前处于RC阶段)和Spring Boot 2(目前处于里程碑阶段)中实现。
你可以独立于Spring使用Reactor,但这不会使框架被动和异步,所以你会失去一些好处。您无法只返回Flux
,因为框架尚不了解此类型。
但是,我相信如果您需要协调大量服务调用,它在服务层仍然有用。
在这种情况下,您可以在整个服务层中使用Flux
和Mono
,并将其转换为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;