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())