有办法合并多个单声道错误信号吗?

问题描述 投票:0回答:1

有没有办法将多个错误信号合并?比如说,我想用合并后的验证细节列表来返回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与合并的验证细节列表。

java mono spring-webflux project-reactor flux
1个回答
2
投票

你可以使用 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 - 在这种情况下,你只会得到一个单子列表。

© www.soinside.com 2019 - 2024. All rights reserved.