Лучший способ запустить проверку в той же цепочке без дополнительного подписчика
return Flux.fromIterable(outletEntity.getEmployees()) (1)
.flatMap(this.employeeService.getRepository()::existsById)
.doOnNext(System.out::println)
.map(aBoolean -> {
if (!aBoolean) { (2)
throw new ApiExceptionUtils("tenant not found", HttpStatus.UNPROCESSABLE_ENTITY.value(),
StatusCodeUtils.TENANT_NOT_FOUND);
}
else {
return aBoolean;
}
})
.then(Mono.just(outletEntity)) (3)
.flatMap(outletEntity1 -> {
outletEntity.setTenantId(tenantId);
return this.outletRepository.save(outletEntity);
});
1) Создать Flux из коллекции сотрудников и выполнить итерации по потокам реактора с проверкой;
2) Проверьте, не является ли ваш тип ложным, и сгенерируйте исключение, он остановит эту цепочку;
3) Если все прошло гладко , то () переключится на Mono с помощьюoutletEntity, сохраняет его и возвращает;
Об обработке ошибок.Если вы не обрабатываете ошибки, WebFlux разрешает их в DefaultErrorWebExceptionHandler .
Вы можете добавить свою собственную обработку ошибок, как в Web MVC, или добавить свой собственный обработчик исключений в WebFlux Config.
Более подробно вы можете прочитать здесь: web-реактивный