In RxJava 2 and Reactor there is a switchIfEmpty
like method to switch to new flow if there is no elements in current flow.
But when I began to use Minuty, I can not find an alternative when I convert my Quarkus sample to use the Reactive features.
Currently my solution is: in my PostRepository
, I use an exception to indicate there is no post found.
public Uni<Post> findById(UUID id) {
return this.client
.preparedQuery("SELECT * FROM posts WHERE id=$1", Tuple.of(id))
.map(RowSet::iterator)
.flatMap(it -> it.hasNext() ? Uni.createFrom().item(rowToPost(it.next())) : Uni.createFrom().failure(()-> new PostNotFoundException()));
}
And catch it in the PostResource
.
@Path("{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Uni<Response> getPostById(@PathParam("id") final String id) {
return this.posts.findById(UUID.fromString(id))
.map(data -> ok(data).build())
.onFailure(PostNotFoundException.class).recoverWithItem(status(Status.NOT_FOUND).build());
}
How to return an Uni
means 0 or 1 element in PostRepository
, and use a switchIfEmpty
like method in PostResource
to build the alternative path for the flow?
switchIfEmpty
in the stream if there is null.Thenull
is still passed to the main flow, egmap(null will go here instead).onItem().ifNull...
. – Ferrara