spring-boot 2.0 レスト コントローラーで、必要に応じて動作する次のコードを作成しました。
@ResponseBody
@GetMapping("/test3")
Mono<List<String>> test3(){
List<String> l1 = Arrays.asList("one","two","three");
List<String> l2 = Arrays.asList("four","five","six");
return Flux
.concat(Flux.fromIterable(l1),Flux.fromIterable(l2))
.collectList();
}
私の問題は、外部データソースから同じことをしようとしたことに起因しています。次のテスト ケースを作成しました。
@ResponseBody
@GetMapping("/test4")
Flux<Object> test4(){
List<String> indecies = Arrays.asList("1","2");
return Flux.concat(
Flux.fromIterable(indecies)
.flatMap(k -> Flux.just(myRepository.getList(k))
.subscribeOn(Schedulers.parallel()),2
)
).collectList();
}
myRepository は次のとおりです。
@Repository
public class MyRepository {
List<String> l1 = Arrays.asList("one","two","three");
List<String> l2 = Arrays.asList("four","five","six");
Map<String, List<String>> pm = new HashMap<String, List<String>>();
MyRepository(){
pm.put("1", l1);
pm.put("2", l2);
}
List<String> getList(String key){
List<String> list = pm.get(key);
return list;
}
}
test4 というラベルの付いたコードで、コード ヒント エラーが表示されます。
型の不一致: Flux< List < String >> から Publisher < ? に変換できません Publisher < ? を拡張します。オブジェクトを拡張 >>
いくつか質問があります:
- Flux はパブリッシャーだと思いましたか? では、なぜエラーが発生するのでしょうか?
- テスト3と同じ結果を出力するように、テスト4で何が間違っていますか?
予想される出力は次のとおりです: [["one","two","three","four","five","six"]]