配列(List)で受け取る
ソースコード
ソースコードのポイント抜粋
routesファイルの抜粋
GET / controllers.TestController.index(n: List[Int])
Controllerのメソッド
def index(numbers: List[Int]) = Action {
Ok(views.html.index(numbers))
}
ポイント
- routesで指定するの仮引数(?)の(n :List[Int])とクエリストリングの名前が一致していれば良い。
- Controllerの仮引数はわかりやすく変更することができる
- 上記の例では「n」がクエリストリングで、対応するControllerの仮引数が「numbers」
- クエリストリングを指定するときは「?n=1&n=3&n=5」のようにnを複数個指定する。
- RequestからもSeq型で取得することができるが、その場合Seq[String]になっているので、リストの要素を任意の型にできるのでこちらのほうが楽(だと思います)。
ちなみに1つパラメータの場合
Controllerを次のようにすればクエリストリングを受け取ることができます。
必須パラメータの場合
def index(number: Int) = Action {
...
}
オプション(指定しなくてもよい)のパラメータの場合
def index(number: Option[Int]) = Action {
...
}
- RequestからもSeqで(ry
任意型(自分で作ったcase classなど)で受け取る
QueryStringBindableを拡張すれば、任意の型へクエリストリングを変換することが可能です。
参考
- http://tototoshi.hatenablog.com/entry/20130216/1360985707
- http://qiita.com/arc279/items/dcf0ae364a692b0a65eb
イメージとしては「クエリストリング⇔受け取りたい型」の相互変換のコードを記述する感じです。上記の記事で出てくる「PathBindable」はrouteのPath記述部で受け取るパラメータを任意の型へ変換するためのものだと思います(たぶん)。この辺りはまだ公開できるソースを書いていないので、書いたら記事を更新したいと思います。
2016.12.29追記
記事書きました
その他
記事の記述の際の調査の際に重複した記事を見つけました。
playframeworkのroutingでListを受ける
投稿をやめようかと考えましたが、次の理由により投稿しました。
- あらためて投稿することにより多くの方と知識を共有できるかもしれない
- 自分型へのつなぎの部分も載せたかった
- 自分の備忘をPublicな場所に置いておきたかった
結論・感想のようなもの
型は素晴らしい。静的型付けの恩恵が受けられる形でなるべくコードを書きたいですね。