Есть много примеров асинхронных загрузочных веб-сервисов RESTful Spring, все они о CompletableFuture:
@RestController
public class TestController {
private UserService userService;
public TestController(UserService userService) {
this.userService = userService;
}
@RequestMapping(value = "test")
public @ResponseBody CompletableFuture<User> test(@RequestParam(value = "email", required = true) String email) throws InterruptedException {
return userService.findByEmail(email).thenApplyAsync(user -> {
return user;
})
}
}
Но мой вопрос: что получит клиент вместо CompletableFuture, предположим, что это просто почтальон или браузер?
Я знаю, что такое CompletableFuture, и знаю, как с ним обращаться, но внутри моего Java-кода, поэтому мне любопытно,
- что получит простой клиент (который понятия не имеет ни о java
ни о CompletableFuture)
- Предположим, что сервер вычислит результат за 5 минут, поэтому, КОГДА клиент получит его? Асинхронный означает немедленно вернуться назад, а затем получить обратный вызов. Я знаю о CompletableFuture.get () (да, это блокировка, я знаю), но опять же только Java знает, как получить результат от CompletableFuture
Так, пожалуйста, поясните, как это действительно работает?