Esta es la solución más correcta que encomtrarás dar, pero estúdiala pausadamente y analiza si es compatible a tu trabajo.
Solución:
A partir de una Mono
:
return customerMono
.flatMap(c -> ok().body(BodyInserters.fromObject(c)))
.switchIfEmpty(notFound().build());
A partir de una Flux
:
return customerFlux
.collectList()
.flatMap(l ->
if(l.isEmpty())
return notFound().build();
else
return ok().body(BodyInserters.fromObject(l)));
);
Tenga en cuenta que collectList
almacena datos en la memoria, por lo que esta podría no ser la mejor opción para listas grandes. Puede haber una mejor manera de resolver esto.
Usar Flux.hasElements() : Mono
función:
return customerFlux.hasElements()
.flatMap
if (it) ok().body(customerFlux)
else noContent().build()
Además de la solución de Brian, si no desea hacer una verificación vacía de la lista todo el tiempo, puede crear una función de extensión:
fun Flux.collectListOrEmpty(): Mono> = this.collectList().flatMap
val result = if (it.isEmpty())
Mono.empty()
else
Mono.just(it)
result
Y llámalo como lo haces con el Mono:
return customerFlux().collectListOrEmpty()
.switchIfEmpty(notFound().build())
.flatMap(c -> ok().body(BodyInserters.fromObject(c)))
Eres capaz de proteger nuestra tarea exponiendo un comentario o puntuándolo te damos las gracias.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)