2.20. 对 CompletionStage 类型的支持
Jakarta RESTful Web Services 2.1 规范支持通过返回 CompletionStage 而非 @Suspended 注释 来声明异步资源方法。
每当资源方法返回它订阅的 CompletionStage 时,请求都会暂停。只有在 CompletionStage 类型为 CompletionStage 类型时才会恢复请求:
- 解析为值,然后被视为方法的返回值。
- 异常被视为错误情况,处理异常的方式就像资源方法抛出一样。
以下是使用 CompletionStage 的异步处理示例:
public class SimpleResource
{
@GET
@Path("basic")
@Produces("text/plain")
public CompletionStage<Response> getBasic() throws Exception
{
final CompletableFuture<Response> response = new CompletableFuture<>();
Thread t = new Thread()
{
@Override
public void run()
{
try
{
Response jaxrs = Response.ok("basic").type(MediaType.TEXT_PLAIN).build();
response.complete(jaxrs);
}
catch (Exception e)
{
response.completeExceptionally(e);
}
}
};
t.start();
return response;
}
}