spring-webflux
depende de reactor-core
y lo usa internamente para formular lógica
asincrónica y brindar soporte para Reactive Streams. Normalmente, las API de WebFlux devuelven Flux
o
Mono
(ya que se usan internamente) y esperan cualquier implementación de Publisher
de la
especificación Reactive. El uso de Flux
versus Mono
es importante porque ayuda a expresar
el poder de un conjunto; por ejemplo, si se esperan uno o más valores asincrónicos, lo cual puede ser importante,
para la toma de decisiones (por ejemplo, al codificar o decodificar mensajes HTTP).
Con controladores anotados, WebFlux se adapta fácilmente a la biblioteca reactiva elegida por la aplicación. Esto se
hace usando ReactiveAdapterRegistry
, que proporciona soporte conectable para la
biblioteca reactiva y otros tipos asincrónicos. El registro tiene soporte integrado para las corrutinas RxJava 3,
Kotlin y SmallRye Mutiny, pero puede registrar otros adaptadores de terceros.
A partir de Spring Framework 5.3.11, la compatibilidad con RxJava 1 y 2 se suspendió de acuerdo con las pautas de fin de vida útil de RxJava y las pautas de actualización a RxJava 3.
Para las API funcionales (como puntos finales funcionales, WebClient
y otras), se aplican las reglas
comunes a las API de WebFlux: Flux
y Mono
. se utilizan como valores de retorno y Publisher
de la especificación Reactive Streams como entrada. Cuando se proporciona un Publisher
, ya sea uno
personalizado o de otra biblioteca reactiva, solo se puede tomar como una secuencia con semántica desconocida
(0..N). Sin embargo, si conoce la semántica, puede envolverla con Flux
o
Mono.from(Publisher)
en lugar de pasar el Publisher
sin formato.
Por ejemplo, si tiene un Publisher
que no es Mono
, el escritor de mensajes Jackson JSON
acepta múltiples valores. Si el tipo de medio es una secuencia infinita (por ejemplo,
application/json+stream
), los valores se escriben y se restablecen individualmente. De lo contrario,
los valores se almacenan en una lista y se generan como una matriz en formato JSON.