В одном из моих проектов я хочу разработать Asynchronous REST API в Spring Boot (1.5.8) с POST, потому что код, выполняемый API, очень длинный.
Первый вопрос: имеет ли смысл возвращать CallableFuture
из запроса POST?Если так, как заблокировать клиента, пока не придет эффективный ответ?
Вот код моего 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()
всегда возвращает ноль.