对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

响应式库

spring-webflux 依赖于 reactor-core,并在内部使用它来组合异步逻辑以及提供 Reactive Streams 支持。通常,WebFlux 的 API 返回 FluxMono(因为内部使用了它们),并且在接收输入时宽松地接受任何 Reactive Streams 的 Publisher 实现。使用 Flux 还是 Mono 非常重要,因为它有助于表达基数(cardinality)——例如,预期的是单个还是多个异步值,这一点在做决策时可能至关重要(例如,在编码或解码 HTTP 消息时)。spring-doc.cadn.net.cn

对于带注解的控制器,WebFlux 会透明地适配应用程序所选的响应式库。这是借助 ReactiveAdapterRegistry 实现的,该组件为响应式库及其他异步类型提供了可插拔的支持。注册表内置支持 RxJava 3、Kotlin 协程和 SmallRye Mutiny,但您也可以注册其他库。spring-doc.cadn.net.cn

对于函数式 API(例如 [webflux-fn]WebClient 等),WebFlux API 的通用规则适用——返回值为 FluxMono,输入为 Reactive Streams 的 Publisher。当提供 Publisher(无论是自定义的还是来自其他响应式库)时,它只能被视为具有未知语义(0..N)的流。然而,如果语义已知,您可以使用 FluxMono.from(Publisher) 对其进行包装,而不是直接传递原始的 Publisherspring-doc.cadn.net.cn

例如,给定一个不是 PublisherMono,Jackson JSON 消息写入器会预期接收到多个值。如果媒体类型表示无限流(例如 application/json+stream),则各个值会被单独写入并立即刷新。否则,这些值会被缓冲到一个列表中,并以 JSON 数组的形式进行渲染。spring-doc.cadn.net.cn