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

响应式库

spring-webflux 依赖于 reactor-core 并在内部使用它来组合异步逻辑并提供响应式流支持。通常,WebFlux API 返回 FluxMono(因为这些在内部被使用)并且宽容地接受任何响应式流 Publisher 实现作为输入。使用 FluxMono 的选择很重要,因为它有助于表达基数——例如,预期的是单个还是多个异步值,这对于做出决策(例如,在编码或解码 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

例如,给定一个 Publisher 而不是一个 Mono,Jackson JSON 消息写入器期望多个值。如果媒体类型暗示了一个无限流(例如,application/json+stream),则值将单独写入并刷新。否则,值将被缓冲到一个列表中,并作为 JSON 数组呈现。spring-doc.cadn.net.cn