处理Mono流中的已检查异常



不知道如何处理Mono流中的已检查异常。

return Mono.when(monoPubs)
.zipWhen((monos) -> repository.findById(...))
.map((tuple) -> tuple.getT2())
.zipWhen((org) -> createMap(org))
.map((tuple) -> tuple.getT2())
.zipWhen((map) -> emailService.sendEmail(...))
.flatMap(response -> {
return Mono.just(userId);
});

这里,sendEmail方法是用throws Exception声明的。

public Mono<Boolean> sendEmail(...)
throws MessagingException, IOException

那么,如何在zipWhen流中处理这个已检查的异常。

此外,如何处理

.zip当((地图(->emailService.sendEmail(…((

如果方法返回void。

您需要查看sendEmail的实现。不能从发布服务器抛出已检查异常,并且需要将任何已检查异常包装为未检查异常。

Exceptions类提供了一个propagate方法,可用于将任何已检查的异常包装为未检查的异常。

try {
...
}
catch (SomeCheckedException e) {
throw Exceptions.propagate(e);
}

作为替代方案,您可以使用lombok@SneakyThrows来包装非反应方法。

Mono方法抛出异常,您可以使用onError*方法以您喜欢的方式处理异常

var result = Mono.just("test")
.zipWhen((map) -> sendEmail())
.onErrorMap(SendEmailException.class, e -> new RuntimeException(e.getMessage()))
.flatMap(Mono::just);

此外,从你的帖子中还不太清楚,如果sendEmail是否接受param,sendEmail不接受任何输入,我只会使用doOnNext,因为它是一个void方法。

最新更新