我试图创建路由,将捕获的异常包装到我的异常中,该异常包含登录用户的用户对象。理想情况下,我更愿意将这些信息放入ContextRequest
,以便在ExceptionHandler
中使用它,但它是不可变的。
我的结论是,正确的方法是使用this example中描述的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
的内容。我怀疑它与外部路线的动态性有关。
如何实现将用户上下文信息传递给异常处理程序的目标?
答案 0 :(得分:1)
尝试
def completeWithUserAwareException(user: User) =
handleExceptions(
ExceptionHandler {
case NonFatal(ex) => failWith(new ExceptionWithUser(user, 0, ex))
})