Play Framework 2.4 で reverse router の absoluteURL を Controller 外で使ったら RequestHeader がねーよって言われて解決した話

小ネタ。

reverse router (controller.routes クラス)を使って URL を取得しようとした時

val link = routes.HogeController.piyo(fuga).absoluteURL()

これを controller 外で呼ぶと

Cannot find any HTTP Request Header here

とかいってエラーになる。

結論から言うと、absoluteURL のシグネチャは

def absoluteURL()(implicit request: RequestHeader): String

なので、absoluteURL() を呼ぶメソッドが Controller から呼ばれること前提で

def hoge()(implicit request: RequestHeader): String = {
  routes.HogeController.piyo(fuga).absoluteURL()
}

とかするときれいにまとまった。

よかったね。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中