Вы можете использовать служебный метод Exceptions.unwrapMultiple()
для получения List<Throwable>
, что позволит вам затем сократить этот список до одного ValidationException
(или выполнить любую другую проверку / обработку, которая вам нравится.)
Тогда это просто случай обертывания вышеуказанного в onErrorMap()
:
Mono.zipDelayError(
Mono.error(new ValidationException("Reason 1")),
Mono.just("ok"),
Mono.error(new ValidationException("Reason 2"))
)
.onErrorMap(e ->
Exceptions.unwrapMultiple(e).stream()
.reduce((e1, e2) -> new ValidationException(String.join(", ", e1.getMessage(), e2.getMessage()))).get()
);
..., что дает:
Exception in thread "main" reactor.core.Exceptions$ReactiveException: ValidationException: Reason 1, Reason 2
Обратите внимание, что Exceptions.unwrapMultiple()
все равно будет работать в случае, когда исключение не является множественным - в этом случае вы просто получите одноэлементный список.