Я хочу сделать следующее с помощью Spring WebFlux и данного REST-API:
- Получить список имен файлов (GET / files)
- Удалить каждый полученный файл (DELETE / files / local / {имя файла} для каждого)
Проблема в том, что я не могу объединить оба действия в «один» экземпляр Mono.Моя текущая реализация недостаточна, потому что она блокирует экземпляры Mono для немедленного выполнения вызовов API вместо их реактивного выполнения.
Моя нереактивная реализация:
public Mono cleanUpUploadedFiles() {
WebClient webClient = this.getWebClient();
// get all files / directories
Mono<FilesOverview> filesOverviewMono = this.getResource("/files", FilesOverview.class);
FilesOverview filesOverview = filesOverviewMono.block(); // TODO: prevent blocking mono
// delete file / directory one by one
for (FileOverview file : filesOverview.getFiles()) {
ClientResponse clientResponse;
clientResponse = webClient
.delete()
.uri(String.format("/files/local/%s", file.getName()))
.exchange()
.block(); // TODO: prevent blocking mono
if (clientResponse == null) {
return Mono.error(new MyException(String.format("could not execute rest call to delete uploaded files with uuid %s", file.getName())));
}
HttpStatus clientResponseStatusCode = clientResponse.statusCode();
if (clientResponseStatusCode.isError()) {
return Mono.error(new MyException(String.format("cannot delete uploaded files with uuid %s", file.getName())));
}
}
return Mono.empty(); // TODO: return Mono instance performing everything reactive without blocking
}
Как выполнить последовательный вебзапросы в одном моно экземпляре реагируют?