Как Spring MVC Controller будет ожидать завершения всех асинхронных запросов WebClient? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь использовать WebClient в своем приложении Spring 5 Web MVC.Мой контроллер возвращает представление JSP, поэтому мне нужно дождаться завершения всех асинхронных вызовов перед обработкой ответа пользователю.Пример:

   @RequestMapping(value="asyncCalls",method = RequestMethod.GET)
    public String start(Map<String,Object> Model)
    {
        Mono<String> webClientResA = webClient.get().retrieve().bodyToMono(String.class);
        Mono<String> webClientResB = webClient.get().retrieve().bodyToMono(String.class);
        Mono<String> webClientResC = webClient.get().retrieve().bodyToMono(String.class);

        webClientResA.subscribe(res->{model.add(res);});`
        webClientResB.subscribe(res->{model.add(res);});
        webClientResC.subscribe(res->{model.add(res);});

        //database queries, etc.

        return "homeJSP/home";
    }`

Мне нужно, чтобы основной поток запросов подождал, пока все объекты не появятся в модели, перед рендерингом представления.Единственный способ сделать это - создать экземпляр CountDownLatch (3) и вызвать latch.countDown () в каждой лямбде подписки и вызвать latch.await () перед возвратом.Но есть ли более приемлемый способ сделать это в стандартной среде сервлетов?

Спасибо

...