2.20. 对 CompletionStage 类型的支持
JAX-RS 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; } }