Я пытаюсь поиграться с 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 не блокирует, я могу запустить два вызова веб-сервисов, а затем объединить их без необходимости в завершаемых фьючерсах и т. Д.?