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 に答える