Используйте Mono::switchIfEmpty
, который предоставляет альтернативу Mono
в случае, если предыдущий заполнен без данных. Пока ReactiveMongoRepository::save
возвращает Mono
, вы можете передать его для генерации альтернативного.
return repository.findById(category.getId())
.switchIfEmpty(repository.save(new Category(category.getName())));
В случае, если ReactiveMongoRepository::findById
вернет Mono
с данными, Mono::switchIfEmpty
не будет вызываемый.
Редактировать: Использование Mono::defer
с Supplier<Mono>
делает операцию сохранения отложенной при необходимости:
.switchIfEmpty(Mono.defer(() -> repository.save(new Category(category.getName()))));