有没有办法将多个错误信号合并?比如说,我想用合并后的验证细节列表来返回ValidationException。
return Mono.zipDelayError(
monoOne(), //throws ValidationException with list of validation details 1
monoTwo(),
monoThree() //throws ValidationException with list of validation details 2
)
.then();
}
作为一个结果,我想返回ValidationException与合并的验证细节列表。
你可以使用 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()
的情况下仍然有效。是不是 a multiple - 在这种情况下,你只会得到一个单子列表。