如何从 Spring Flux 平面图操作中返回对象

Posted

技术标签:

【中文标题】如何从 Spring Flux 平面图操作中返回对象【英文标题】:How to return a object from Spring Flux flatmap operation 【发布时间】:2021-08-03 06:16:56 【问题描述】:

我希望在保存文件后返回 Mono.just(file.getAbsolutePath())。以下是我的代码:

 public Mono<String> save(Mono<FilePart> filePartMono) 
        Mono<String> monoString = filePartMono.flatMap(filePart -> 
            File file = new File(filePart.filename());
            if (file.exists()) 
                file.delete();
                LOG.info("existing file deleted: ", file.getAbsolutePath());
            
            Mono<Void> mono = filePart.transferTo(file);
            LOG.info("file saved: ", file.getAbsolutePath());
            return Mono.just(file.getAbsolutePath());
        ).thenReturn("hello");
        return monoString;

现在我正在返回一个“你好”。有没有办法从我的 save() 方法中返回 file.getAbsolutePath() 而不是字符串?

【问题讨论】:

【参考方案1】:

我认为可以这样:

public Mono<String> save(Mono<FilePart> filePartMono) 
    return filePartMono.flatMap(filePart -> 
        File file = new File(filePart.filename());
        if (file.exists()) 
            file.delete();
            log.info("existing file deleted: ", file.getAbsolutePath());
        
        return filePart.transferTo(file)
            .doOnNext(v -> 
                log.info("file saved: ", file.getAbsolutePath());
            ).thenReturn(file.getAbsolutePath());
    );

【讨论】:

以上是关于如何从 Spring Flux 平面图操作中返回对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Webflux 中返回 Mono<Map<String, Flux<Integer>>> 响应?

从 Spring WebFlux 返回 Flux<String> 返回一个字符串而不是 JSON 中的字符串数组

如何并行进行多个 Spring Webclient 调用并等待结果?

Flux waitFor() 和异步操作,如何建模。

Spring反应式编程:如何创建一个动态的Publishers列表作为Flux.merge的输入。

如何在 Thymeleaf + spring boot 控制器中显示来自 Flux 的数据