【发布时间】:2018-09-21 18:35:39
【问题描述】:
我正在尝试使用 SpringBoot 2.0 和新的响应式 webFlux 库。我想知道如何将通过无阻塞 WebClient 进行的两次调用的结果返回给我的 Springboot API 的调用者。我的代码是:
@RequestMapping("/search")
public CombinedResults perfomSearch(@RequestParam final String searchTerm) {
Mono<SearchResponse> fasMono = searchService.getSearchResults(searchTerm, "fh");
Mono<SearchResponse> esMono = searchService.getSearchResults(searchTerm, "es");
CombinedResults combinedResults = new CombinedResults(fasMono, esMono);
return combinedResults;
}
CombinedResult 对象只是一个 POJO:
public class CombinedResults {
private Mono<SearchResponse> fasSearchResponse;
private Mono<SearchResponse> esSearchResponse;
public CombinedResults(final Mono<SearchResponse> fasSearchResponse, final Mono<SearchResponse> esSearchResponse) {
this.fasSearchResponse = fasSearchResponse;
this.esSearchResponse = esSearchResponse;
}
public Mono<SearchResponse> getFasSearchResponse() {
return fasSearchResponse;
}
public void setFasSearchResponse(final Mono<SearchResponse> fasSearchResponse) {
this.fasSearchResponse = fasSearchResponse;
}
public Mono<SearchResponse> getEsSearchResponse() {
return esSearchResponse;
}
public void setEsSearchResponse(final Mono<SearchResponse> esSearchResponse) {
this.esSearchResponse = esSearchResponse;
}
但是,如果我称之为,我得到的回应是
{
"fasSearchResponse": {
"scanAvailable": true
},
"esSearchResponse": {
"scanAvailable": true
}
}
而不是 SearchResponse 对象的内容。我觉得我可能错过了它应该如何工作的一个基本点!我的想法是,因为 WebClient 没有阻塞,我可以触发对 Web 服务的两个调用,然后将它们组合起来而不需要可完成的期货等?
【问题讨论】:
标签: spring reactive-programming spring-webflux