如果我以此方式定义了我的安逸资源:
@GET
@Path("/stuff")
@Produces(MediaType.APPLICATION_JSON)
public Response getStuff() {
final Single<Stuff> stuffSingle = stuffService.getStuffAsync();
return Response.ok().entity(stuffSingle.blockingGet()).build();
}
在getStuffAsync()方法的某处发生异常。
我可以使用ExceptionMapper委托它来处理异常。
@Provider
public class MyExceptionMapper implements ExceptionMapper<Exception> { ..
而且有效-可以处理异常并将其传递给用户。
但是,如果我使用异步休息端点:
@Path("/stuff")
@Produces(MediaType.APPLICATION_JSON)
public CompletionStage<Stuff>
stuffSingle = stuffService.getStufAsync();
final CompletableFuture<Stuff> stuffSignle = new CompletableFuture<>();
stuffSignle.subscribe(future::complete);
return future
}
万一发生异常,端点将永远挂起。没有响应会传播给用户。没有MyExceptionMapper参与。
问:在Quarkus中如何轻松使用CompletionStage处理它