1

我正在尝试创建将捕获的异常包装到带有登录用户的用户对象的异常中的路由。理想情况下,我更喜欢将这些信息放入其中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永远不会被调用。我怀疑这与外部路线的动态性质有关。

如何实现将用户上下文信息传递给异常处理程序的目标?

4

1 回答 1

1

尝试

def completeWithUserAwareException(user: User) =
  handleExceptions(
    ExceptionHandler {
      case NonFatal(ex) => failWith(new ExceptionWithUser(user, 0, ex))
    })
于 2015-10-07T13:19:38.263 回答