【问题标题】:How to handle exception in flatmap - reactive spring如何处理平面图中的异常 - 反应弹簧
【发布时间】:2020-08-31 12:39:45
【问题描述】:
查看此代码:
somePostRequest
.bodyToMono(String.class)
.flatMap(token -> Mono.just(addTokenToMap(token,bankCode)));
这里的问题是方法:addTokenToMap() - 需要包装在 try catch 块中 - 我希望避免这种情况。有没有办法用doOnError() 或类似的东西来处理这个问题?
【问题讨论】:
标签:
java
spring
spring-reactive
【解决方案1】:
如果你创建一个函数式接口和一个辅助方法,那么你可以让你的调用站点避免 try-catch。
如果你只需要使用一次它可能有点过头了,但如果你需要经常做同样的事情,那么它可以为你节省一些打字时间。
@FunctionalInterface
interface ThrowableSupplier<T> {
T get() throws Throwable;
}
public static <T> Consumer<MonoSink<T>> sink(ThrowableSupplier<T> supplier) {
return sink -> {
try {
sink.success(supplier.get());
}
catch (Throwable throwable) {
sink.error(throwable);
}
};
}
你的代码变成了
Mono.create(sink(() -> addTokenToMap(token, bankCode)));