1

Trying to send custom error message when item not found. ifNotNull case correct generate required response. But ifNull not generate required response (Always the response is empty with status code 200)

AuthorService.java

public Uni<Author> findByName(String name) {
    return authorRepo.findByName(name);
}

Resource.java

@GET
@Path("/{name}")
public Uni<Response> get(@PathParam("name") String name) {
    return authorService.findByName(name)
            .onItem().ifNotNull().transform(t -> new ResponseBodyDTO("success", true, t))
            .onItem().transform(t -> Response.ok(t).build())
            .onItem().ifNull().switchTo(() -> Uni.createFrom().item(new ResponseBodyDTO("fail", false, null))
                    .onItem().transform(t -> Response.status(Response.Status.NOT_FOUND).entity(t).build()));
}

1 Answers1

1

Use the following

@GET
@Path("/{name}")
public Uni<Response> get(@PathParam("name") String name) {
    return authorService.findByName(name)
            .onItem().ifNotNull().transform(t -> Response.ok(new ResponseBodyDTO("success", true, t)).build())
            .onItem().ifNull().continueWith(Response.status(Response.Status.NOT_FOUND).entity(new ResponseBodyDTO("fail", false, null)).build())
}
geoand
  • 60,071
  • 24
  • 172
  • 190