在Spring 5中,我只知道Spring方法处理请求,并返回、Mono、或Flux作为响应。
@Component
public class HelloWorldHandler {
public Mono<ServerResponse> helloWorld(ServerRequest request) {
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).body(BodyInserters.fromObject("Hello World"));
}
}但我不知道Mono和Flux是什么意思,也不知道它如何与WebFlux Handler一起工作。
有谁能简单地解释一下
1. Mono和Flux的含义。
2.如何使用WebFlux Handler。
提前谢谢。
发布于 2018-07-04 07:03:44
Webflux都是关于反应性编程的,总之,这意味着业务逻辑只有在处理数据可用时才能执行(反应性)。
这意味着您不再能够返回简单的POJO,但是您必须返回其他的东西,当它可用时可以提供结果。在反应流计划中,这被称为Publisher。Publisher有一个subcribe()方法,允许使用者在POJO可用时获得POJO。
Publisher (例如Publisher<Foo>)可以返回零或多个,可能是无穷大的结果。为了更清楚地说明您可以期望获得多少结果,工程堆 (Pivotal的反应性流实现)引入了两个Publisher实现
因此,基本上您可以看到Mono<Foo>是返回Foo的反应性对应物,而Flux<Foo>是Collection<Foo>的反应性对应物。
例如:
Flux
.just(1, 2, 3, 4)
.map(nr -> nr * 2)
.subscribe(System.out::println);尽管这些数字已经可用(您可以看到),但您应该认识到,由于它是一个Flux,它们是一个接一个地发出的。在其他情况下,数字可能来自外部API,在这种情况下,它们不会立即可用。下一个阶段( map操作符),一旦它检索到一个,它就会把这个数字乘以,这意味着它也一个一个地进行这个映射,然后发出新的值。
最终,会有一个订阅者(应该总是有一个订阅者,但它可能是Spring框架本身订阅的),在这种情况下,它将打印它获得的每个值,并将其一个一个地打印到控制台。
您还应该意识到,在处理这些项目时没有特定的顺序。这可能是第一个数字已经打印在控制台上,而第三个项目还没有乘以两个。
因此,在您的示例中,您有一个Mono<ServerResponse>,这意味着一旦ServerResponse可用,WebFlux框架就可以利用它。因为只有一个预期的ServerResponse,所以它是一个Mono而不是一个Flux。
https://stackoverflow.com/questions/51160076
复制相似问题