У меня был простой поток проверки Java, подобный этому примеру:
if (!request.isValid()) {
throw new ValidationException("Its not valid");
}
if (!request.isCorrect()) {
throw new IncorrectException();
}
return Mono.just(
someService.process(request)
);
Я попытался связать вызовы методов, чтобы избавиться от ifs
, но это не сработало:
return Mono.just(request)
.filter(req -> !req.isValid())
.switchIfEmpty(Mono.error(new ValidationException("Its not valid")))
.filter(req -> !req.isCorrect())
.switchIfEmpty(Mono.error(new IncorrectException()))
.flatMap(req -> Mono.just(someService.process(req)));
Проблема в том, что даже если это не удается на isValid()
, код продолжается, и второй switch
перезаписывает первый.
Как я мог заставить код работать и сохранить цепочку?