我正在尝试创建将捕获的异常包装到带有登录用户的用户对象的异常中的路由。理想情况下,我更喜欢将这些信息放入其中ContextRequest
以便在我的中使用它,ExceptionHandler
但它是不可变的。
我得出的结论是,正确的方法是使用本示例mapInnerRoute
中描述的方法。
def completeWithUserAwareException(user: User) =
mapInnerRoute { route =>
ctx =>
try {
route(ctx)
} catch {
case ex: Throwable =>
ctx.fail(new ExceptionWithUser(user, 0, ex))
}
}
我这样使用
val authenticatedRoutes = myAuthorization { user =>
completeWithUserAwareException(user) {
pathPrefix("admin") {
(get & path("plugins")) {
complete {
""
}
}
}
}
}
的内容completeWithUserAwareException
永远不会被调用。我怀疑这与外部路线的动态性质有关。
如何实现将用户上下文信息传递给异常处理程序的目标?