Ale*_*shi 5 java asynchronous jax-rs jersey completable-future
我正在研究 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());
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用 Jersey 创建异步端点的正确方法:
@POST
@Path("/goes")
@Consumes("application/json")
@Produces("application/json")
public void createTodoAsync3(@Suspended final AsyncResponse asyncResponse, Todo todo) {
CompletableFuture<Response> future = CompletableFuture.supplyAsync(() -> createTodo3(todo));
future.thenAccept(resp -> asyncResponse.resume(resp));
}
private Response createTodo3(Todo todo) {
//all logic goes here
return Response.accepted().entity(todo).build();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3061 次 |
| 最近记录: |