はじめに
昨日、PlayFrameworkでCookieを試してみましたという記事を書きました。
今日は、Formsでリクエストパラメータ(クエリ文字列)を読み込むことを試してみたいと思います。
具体的には、PostmanというツールでPOSTメソッドのリクエストを送信して、そのリクエストパラメータを読み込めるかどうかを確認したいと思います。
Formsでリクエストパラメータを読み込めることは知っているので、主に、パラメータの数が少ない場合とパラメータの数が多い場合を確認してみたいと思います。
ひとまず、参考にした記事を紹介します。
前回のPlayFrameworkでCookieを試してみましたを再利用します。この記事では、変更したファイルを紹介します。
ファイル
まず、routesを見てみます。POSTメソッドを利用するように変更しました。
POST / controllers.Tokyo.user
次に、Tokyo.scalaを見てみます。リクエストパラメータを読み込むように変更しました。
package controllers
import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
case class UserData(name: String, age: Int)
object Tokyo extends Controller {
val userForm = Form(
mapping(
"name" -> text,
"age" -> number
)(UserData.apply)(UserData.unapply)
)
def user = Action { implicit request =>
val userData = userForm.bindFromRequest.fold(
error => UserData("error", 0),
data => data
)
Ok(s"name: ${userData.name}, age: ${userData.age}")
}
}
Postmanでリクエストを送信してみる
リクエストパラメータが正常な場合
期待通りの動作になります。
リクエストパラメータが多い場合
余分なパラメータweightを無視します。
リクエストパラメータが少ない場合
普通にgetで読み込もうとすると、None.getで実行時エラーになります。そのためfoldを使いました。ここではエラーの場合にUserData("error", 0)を返すようにしています。
振り返り
リクエストパラメータが多い場合と少ない場合を確認しました。ひとまず、想定していた結果になりました。
Postmanを使えば、HTMLでPOSTメソッドを用意する必要がありません。ちょっとしたことを試すときには便利だと思います。