我正在学习Jersey,书上说你可以使用CompletableFuture(和CompletitionStage)以非阻塞IO的方式调用API。
但是当我使用Postman调用API时,总是得到500的错误。
如果我调试代码,我会发现方法被正确地调用了。
第一个GET方法是同步的,可以正常工作。第二个和第三个返回错误500。
我错过了什么吗?
@Path("/hello")
public class HelloController {
@GET
@Path("/first")
@Produces(MediaType.TEXT_PLAIN)
public String first() {
return "It works";
}
@GET
@Path("/second")
@Produces(MediaType.TEXT_PLAIN)
public CompletionStage<Response> second() {
return CompletableFuture.supplyAsync(() -> Response.accepted().entity("Hello!").build());
}
@GET
@Path("/third")
@Produces(MediaType.TEXT_PLAIN)
public CompletableFuture<Response> third() {
return CompletableFuture.supplyAsync(() -> Response.accepted().entity("Hello!").build());
}
}
@Suspended
的一种替代方式。你只需要 1) 启动一个线程来执行逻辑并在CompletableFuture
上调用complete
即可。 - kolossus