【发布时间】:2021-12-11 18:33:33
【问题描述】:
我需要捕获 MonoError 并使用 ErrorResponse 停止应用程序,但应用程序按我预期的方式运行。
我的代码:
return checkText(text)
.then(getWordsFromText(text))
.map(keyWords -> new SuccessfulResponse(keyWords))
.onErrorResume(
throwable -> {
return Mono.just(new ErrorResponse(throwable.getMessage()));
});
public Mono<Void> checkText(String text) {
if (text == null) {
return Mono.error(new Exception("wrong text"));
}
return Mono.empty();
}
我的问题是,如果 text 参数是 null -> 我属于 getWordsFromText 方法。这是不正确的执行,因为如果 text 参数等于 null,则应用程序必须退出并出现错误(带有 ErrorResponse)。
我将其修复为(将 'then' 替换为 'flatMap'):
return checkText(text)
.flatMap(voidParam -> getWordsFromText(text)) //replaced 'then' to 'flatMap'
.map(keyWords -> new SuccessfulResponse(keyWords))
.onErrorResume(
throwable -> {
return Mono.just(new ErrorResponse(throwable.getMessage()));
});
现在它可以正常工作了。如果 text 参数为 null,我会错过调用 getWordsFromText 方法并陷入错误处理 (onErrorResume)。 p>
但我认为在我的情况下使用 flatMap 不是一个好主意,我不喜欢它的外观:.flatMap(voidParam -> ...
您有什么想法可以做得更好吗? (没有'flatMap')
【问题讨论】:
-
我建议检查这个答案:stackoverflow.com/questions/57870706/…
标签: java try-catch spring-webflux flux reactor