[Scala]PlayFrameworkでリクエストパラメータを追加する

  • 投稿日:
  • 更新日:2020/09/05
  • by
  • カテゴリ:

Play Framework 2.8をIntelliJで使おうとしてハマったのでメモ。

今回はIntelliJ関係ないけど。

問題

PlayFrameworkでリクエストパラメータの追加のしかたがわからない。

とりあえずHello Worldは動いた。

さて、どうやってリクエストパラメータを追加するか。

あと、viewsの方でもどうやって変数を使うか。

解決法

リクエストパラメータを追加する方法は2通りある。

メソッドシグネチャにパラメータ追加

まずは、コントローラ(HomeController)のメソッドシグネチャに引数を追加する方法。

def hello(name: String) = Action { implicit request: Request[AnyContent] => ... }

name: Stringがリクエストパラメータ。

これに対応して、conf/routesファイルに設定

GET /hello controllers.HomeController.hello(name: String)

設定はこれでok、あとは/helloをリクエストする際にリクエストパラメータがあればよろし。

http://localhost:9000/hello?name=MyName

という感じ。

getQueryStringを使う

もう一つの方法は、動的にAPIから取得する方法。

HelloController#profile内で、

val name: Option[String] = request.getQueryString("name")

ここではnameはオプション型になるので、直接Stringで扱いたければ、

val name: String = request.getQueryString("name").getOrElse("")

で直接値が取れる(美しくないけど)。

この方法はrouteとかに設定は不要。

viewに変数を渡す

hogehoge.views.htmlで変数を使うには、最初の行に変数宣言をする。

@(name: String)

デフォルト値とかも大丈夫。

@(name: String, option: String = "defaultValue")

ソース内での変数の利用は、アットマークをつける。

@name

コントローラからは引数指定で行ける。

Ok(views.html.hello("myname"))

こちらもよく読まれています