如何从scala播放中访问帖子数据?

时间:2012-06-26 16:54:09

标签: scala playframework

我有一个类型为“POST”的路线。我正在将帖子数据发送到页面。如何访问该帖子数据。例如,在PHP中使用$ _POST

如何在scala和play框架中访问帖子数据?

4 个答案:

答案 0 :(得分:9)

从Play 2.1开始,有两种方法可以获得POST参数:

1)通过Action解析器参数将body声明为form-urlencoded,在这种情况下,request.body会自动转换为Map [String,Seq [String]]:

def test = Action(parse.tolerantFormUrlEncoded) { request =>
    val paramVal = request.body.get("param").map(_.head)
}

2)通过调用request.body.asFormUrlEncoded来获取Map [String,Seq [String]]:

def test = Action { request =>
    val paramVal = request.body.asFormUrlEncoded.get("param").map(_.head)
}

答案 1 :(得分:5)

在这里,你已经很好地了解了它在Play中的表现:

https://github.com/playframework/Play20/blob/master/samples/scala/zentasks/app/controllers/Application.scala

val loginForm = Form(
  tuple(
    "email" -> text,
    "password" -> text
  ) verifying ("Invalid email or password", result => result match {
    case (email, password) => User.authenticate(email, password).isDefined
  })
)



/**
 * Handle login form submission.
 */
def authenticate = Action { implicit request =>
  loginForm.bindFromRequest.fold(
    formWithErrors => BadRequest(html.login(formWithErrors)),
    user => Redirect(routes.Projects.index).withSession("email" -> user._1)
  )
}

forms submission

的文档中对此进行了描述

答案 2 :(得分:2)

正如@Marcus指出的那样,bindFromRequest是首选方法。但是,对于简单的一次性案例,一个字段

<input name="foo" type="text" value="1">

可以通过post'd形式访问

val test = Action { implicit request =>
  val maybeFoo = request.body.get("foo") // returns an Option[String]
  maybeFoo map {_.toInt} getOrElse 0
}

答案 3 :(得分:0)

在这里,您可以很好地了解它在Play 2中的完成情况:

&#13;
&#13;
def test = Action(parse.tolerantFormUrlEncoded) { request =>
    val paramVal = request.body.get("param").map(_.head).getorElse("");
}
&#13;
&#13;
&#13;