1

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 < ? を拡張します。オブジェクトを拡張 >>

いくつか質問があります:

  1. Flux はパブリッシャーだと思いましたか? では、なぜエラーが発生するのでしょうか?
  2. テスト3と同じ結果を出力するように、テスト4で何が間違っていますか?

予想される出力は次のとおりです: [["one","two","three","four","five","six"]]

4

1 に答える 1