我正在建立一个调用两个rest资源的服务。第一个调用检索项列表,第二个调用获取列表中每个项的详细信息。
Flux<Result> search(query) {
return client.post().uri("/search")
.body(BodyInserters.fromObject(query))
.retrieve()
.bodyToMono(SearchResults.class)
.flatMapIterable(r -> r.getResults())
.flatMap(this::detail);
}
Mono<Detail> detail(result) {
return client.get().uri("/detail/{id}", result.id)
.retrieve()
.doOnNext(System.out::println))
.bodyToMono(Detail.class);
}
我可以看到
GET /detail/{id}
请求已发送,但
doOnNext
在
this::detail
在我的测试中从未调用块:
StepVerifier.create(target.search(query))
.assertNext(d -> {
assertThat(d.getField()).isEqualTo("detailed");
})
.verifyComplete();
测试失败的原因是:
java.lang.assertonerror:expection“assertNext”失败(应为:onNext();实际为:onComplete())
我有点困在这个阶段,反应堆文件使用
flatMap
对于这种情况,似乎发送了子请求(详细信息)。当我看着威莫克时,我看到他能够回复我,但是我什么也没有了。
有人知道哪里出了问题吗?