Quarkus Mutiny 多过滤器异常处理
Quarkus Mutiny Multi filter Exception handling
在 multi 的过滤方法中处理异常的正确方法是什么,因为我们只能 return 一个布尔值并且不能传播失败?这就是我的代码现在的样子,我应该如何正确处理过滤器中的异常?
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);
}
});
如果 filter
谓词抛出异常,该异常将作为失败传播到下游。如果,在那种情况下,你想 return false
,你需要像你那样做(try/catch
和 return false
)。
在异常情况下,谓词只能抛出运行时异常。如果您想抛出已检查的异常,可以使用 unchecked 实用程序方法 (https://smallrye.io/smallrye-mutiny/guides/unchecked)。它为您将异常包装在运行时异常中。
在 multi 的过滤方法中处理异常的正确方法是什么,因为我们只能 return 一个布尔值并且不能传播失败?这就是我的代码现在的样子,我应该如何正确处理过滤器中的异常?
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);
}
});
如果 filter
谓词抛出异常,该异常将作为失败传播到下游。如果,在那种情况下,你想 return false
,你需要像你那样做(try/catch
和 return false
)。
在异常情况下,谓词只能抛出运行时异常。如果您想抛出已检查的异常,可以使用 unchecked 实用程序方法 (https://smallrye.io/smallrye-mutiny/guides/unchecked)。它为您将异常包装在运行时异常中。