Java 休息 API POST return 未来

Java REST API POST return Future

在我的一个项目中,我想在 Spring Boot (1.5.8) 中使用 POST 开发异步 REST API,因为 API 执行的代码很长。

第一个问题是:从 POST 请求中 return 一个 CallableFuture 有意义吗? 如果是这样,如何在有效响应到来之前阻止客户端?

这是我的 REST API 的代码:

@RequestMapping(method = RequestMethod.POST)
public CompletableFuture<String> postAPI(@RequestBody() String param) { 
LOGGER.info("I received a POST request");
CompletableFuture<String> result = CompletableFuture.completedFuture(function(param));
return result;}

下面是我用来调用它并检索结果的代码。

ListenableFuture<ResponseEntity<String>> response = restTemplate
    .exchange(uri, HttpMethod.POST, entity,
        String.class);
ResponseEntity<String> result = response.get();
String response = result.getBody();

response.get() 实际上并没有阻止执行,所以 getBody() 总是 return 为空。

我假设您错过了一个要点,即客户端和服务器之间通过 HTTP 进行的通信始终采用 "Request-Response" 模型。

意思是:

在服务器端 - 当您 return result; - 请求完成时。

在客户端 - 当您收到响应时,此请求-响应通信就完成了。

所以你有两个选择:

  • 从客户端发出另一个请求以获得您在第一个响应中发送的 CompletableFuture 结果的实际结果。当然在服务器端有相应的方法。然后客户端将等待服务器 returns 实际结果。

  • 在服务器有实际结果之前不要完成第一次调用。这似乎不是您想要做的,但是... 如果您想阻止客户端 - 发送即时 CompletableFuture 响应的真正原因是什么?

从客户端执行此类操作的唯一原因是 在服务器处理请求时不要阻止客户端