1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PlayFrameworkのFormsを試してみました

Posted at

はじめに

昨日、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でリクエストを送信してみる

リクエストパラメータが正常な場合

期待通りの動作になります。

スクリーンショット 2015-08-13 23.43.16.png

リクエストパラメータが多い場合

余分なパラメータweightを無視します。

スクリーンショット 2015-08-13 23.44.44.png

リクエストパラメータが少ない場合

普通にgetで読み込もうとすると、None.getで実行時エラーになります。そのためfoldを使いました。ここではエラーの場合にUserData("error", 0)を返すようにしています。

form1.png

振り返り

リクエストパラメータが多い場合と少ない場合を確認しました。ひとまず、想定していた結果になりました。

Postmanを使えば、HTMLでPOSTメソッドを用意する必要がありません。ちょっとしたことを試すときには便利だと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?