【问题标题】: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() 或类似的东西来处理这个问题?

【问题讨论】:

  • 不行,你需要扩展 lambda。

标签: 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)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多