不知道如何处理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方法。