0

在 multi 的 filter 方法中处理异常的正确方法是什么,因为我们只能返回一个布尔值而不能传播失败?这就是我的代码现在的样子,我应该如何正确处理过滤器中的异常?

Multi multi = ...;//
multi.filter(data -> {
        try{
            return applyFilter(data);
        } catch(Exception e){
            logger.error("exception occurred while checking filter", e);
            //instead of returning false, how should I propagate the exception?
            return false;
        }
    }
).onItem().transform(data -> {
       return transformData(data);  
   }       
});
4

1 回答 1

1

如果filter谓词抛出异常,则该异常作为失败向下游传播。如果在这种情况下,你想返回false,你需要照你做的(try/catch和返回false)。

在异常情况下,谓词只能抛出运行时异常。如果要抛出已检查的异常,可以使用未检查的实用程序方法 ( https://smallrye.io/smallrye-mutiny/guides/unchecked )。它为您将异常包装在运行时异常中。

于 2021-11-03T06:44:37.220 回答