|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
响应式库
spring-webflux 依赖于 reactor-core 并在内部使用它来组合异步逻辑并提供响应式流支持。通常,WebFlux API 返回 Flux 或 Mono(因为这些在内部被使用)并且宽容地接受任何响应式流 Publisher 实现作为输入。使用 Flux 与 Mono 的选择很重要,因为它有助于表达基数——例如,预期的是单个还是多个异步值,这对于做出决策(例如,在编码或解码 HTTP 消息时)至关重要。
对于带注解的控制器,WebFlux 会透明地适配应用程序所选择的响应式库。这是通过
ReactiveAdapterRegistry 实现的,
它为响应式库和其他异步类型提供了可插拔的支持。该注册表内置支持 RxJava 3、Kotlin 协程和 SmallRye Mutiny,但您也可以注册其他类型。
对于函数式API(例如 [webflux-fn]、WebClient 以及其他),WebFlux API 的通用规则适用——将 Flux 和 Mono 作为返回值,将 Reactive Streams 的 Publisher 作为输入。当提供一个 Publisher(无论是自定义的还是来自其他响应式库)时,只能将其视为具有未知语义(0..N)的流。然而,如果语义是已知的,则可以使用 Flux 或 Mono.from(Publisher) 将其包装,而不是直接传递原始的 Publisher。
例如,给定一个 Publisher 而不是一个 Mono,Jackson JSON 消息写入器期望多个值。如果媒体类型暗示了一个无限流(例如,application/json+stream),则值将单独写入并刷新。否则,值将被缓冲到一个列表中,并作为 JSON 数组呈现。