我是WebFlux的新手.开发文件上传API.我想将上传的文件和元数据保存到数据库中,并将保存的实体作为响应返回.在filePart.transferTo
的flatMap
中未调用lambda表达式.我觉得使用block()
会让使用WebFlux变得毫无意义.如有任何建议,我们不胜感激.
public Mono<Music> uploadMusic(FilePart filePart) throws IOException {
File file = File.createTempFile("tmp-", filePart.filename());
file.deleteOnExit();
Music music = new Music();
return filePart.transferTo(file).flatMap((it) -> {
music.setFilePath(file.getAbsolutePath());
music.setMeta(new Metadata());
log.info(String.valueOf(music));
return this.musicRepository.save(music);
});
}
当我做代码片段测试时,我发现Mono<Void>
0.flatMap返回Mono<SomeObj>
似乎是个问题.
// Lambda expression not invoked
public Mono<Music> voidToObj(FilePart filePart) throws IOException {
Music music = new Music();
return Mono.just(music).then().flatMap(it -> {
music.setMeta(new Metadata());
log.info(music.toString());
return Mono.just(music);
});
}
// Lambda expression invoked
public Mono<Music> objToObj(FilePart filePart) throws IOException {
Music music = new Music();
return Mono.just(music).flatMap(it -> {
music.setMeta(new Metadata());
log.info(music.toString());
return Mono.just(music);
});
}