В контроллере отдыха 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 ‹? расширяет объект >>
Итак, несколько вопросов:
- Я думал, что Флюкс был издателем? Так почему ошибка?
- Что я делаю не так в тесте 4, чтобы он выдал тот же результат, что и в тесте 3?
Ожидаемый результат: [[«один», «два», «три», «четыре», «пять», «шесть»]]
Flux
- этоPublisher
, ноPublisher
неFlux
. Разве вы не должны просто использоватьFlux.fromIterable
вместоFlux.just
? - person M. Deinum   schedule 23.06.2017