我正在尝试在Spring 5 Web MVC应用程序中使用WebClient。我的控制器返回一个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)并在每个订阅lambda中调用latch.countDown()并在返回之前调用latch.await()。但是,在标准的Servlet环境中,还有其他更可接受的方法吗?
谢谢