如何将数据库返回的Flux<Fruit>转换为Mono<List<FruitDto>>类型
问题原因分析
- 原代码中
fruitRepo.findAllById()返回的是Flux<Fruit>类型,流中每个元素是单个Fruit对象,不存在get(0)方法,调用该方法会直接抛出运行时异常 flatMap操作仅会对每个Fruit元素做转换,执行完成后返回的是Flux<FruitDto>类型,和方法要求的返回值Mono<List<FruitDto>>类型不匹配,所以会报错
正确实现方案
你只需要先对每个Fruit做映射转换,再调用collectList()将所有转换后的FruitDto收集为List并封装为Mono即可,修改后的代码如下:
public Mono<List<FruitDto>> findAllBySearchKeys(String id){ // 预期实现将Flux<Fruit>转换为Mono<List<FruitDto>>并返回给调用方 return fruitRepo.findAllById(bol, status) // 单个Fruit转FruitDto .map(Fruit::dto) // 将Flux<FruitDto>的所有元素收集为List,直接返回符合要求的Mono<List<FruitDto>> .collectList(); }
内容的提问来源于stack exchange,提问作者Puneet Gupta
相关产品推荐
相关产品推荐

