Java 如何返回CompletionStage<;回应>;在Quarkus中同步和异步?
我有一个端点,它可以返回同步和异步结果Java 如何返回CompletionStage<;回应>;在Quarkus中同步和异步?,java,asynchronous,quarkus,mutiny,Java,Asynchronous,Quarkus,Mutiny,我有一个端点,它可以返回同步和异步结果 @POST @Path("/create-account") public CompletionStage<Response> createAccount(...) { if (preconditions) { return myAsyncFunction(...); } else { // how to return error immediately??? r
@POST
@Path("/create-account")
public CompletionStage<Response> createAccount(...) {
if (preconditions) {
return myAsyncFunction(...);
}
else {
// how to return error immediately???
return Response.status(Response.Status.BAD_REQUEST).build(); // incorrect return type
}
}
@POST
@路径(“/create account”)
公共CompletionStage CreateCount(…){
如果(先决条件){
返回myAsyncFunction(…);
}
否则{
//如何立即返回错误???
return Response.status(Response.status.BAD_REQUEST).build();//返回类型不正确
}
}
如何有意识地返回某个内容,即同步?是一个接口,用于在可能的异步计算的一个阶段中进行MIDEL操作,在另一个CompletionStage完成时执行操作或计算值
因此,它可以是同步或异步操作的结果
CompletableFuture
是一个实现CompletionStage
接口的JRE类。
您可以创建并返回一个已完成的CompletableFuture
,它使用静态方法实现
return CompletableFuture<Response>.completedFuture(Response.status(Response.Status.BAD_REQUEST).build())
返回CompletableFuture.completedFuture(Response.status(Response.status.BAD_REQUEST.build())
返回的结果将与提供的响应一起完成。因为您将此标记为兵变。 我假设异步函数是uni或multy。 如果使用restasy mutiny,只需返回mutly/uni本身,如指南中所述: 最好是查看兵变指南本身: 了解如何处理错误等
@GET
@Path("{id}")
public Uni<Response> getSingle(Long id) {
return Fruit.findById(client, id)
.onItem().transform(fruit -> fruit != null ? Response.ok(fruit) : Response.status(Status.NOT_FOUND))
.onItem().transform(ResponseBuilder::build);
}
Uni.createFrom()
.item(Response.status(Response.Status.BAD_REQUEST).build())