Playframework POST参数

时间:2014-11-07 15:58:06

标签: scala playframework

我正在尝试使用Playframework Scala(2.3)做一些非常简单的事情:创建一个路由POST并获取POST参数。

路线定义

POST    /ff/user                controllers.Application.createUser

控制器

def createUser = Action.async { request =>
    val user = request.queryString.get("user").flatMap(_.headOption)
    val email = request.queryString.get("email").flatMap(_.headOption)
    val firstname = request.queryString.get("firstname").flatMap(_.headOption)
    val lastname = request.queryString.get("lastname").flatMap(_.headOption)

    Logger.debug("Create User")
    Logger.debug(s"user=$user")
    Logger.debug(s"email=$email")

    Ok("Youpi")
}

当我向/ ff / user发布请求时,日志显示:user = None,email = None。 我无法弄清楚为什么他们是“无”。有什么问题?

感谢帮助。

1 个答案:

答案 0 :(得分:2)

使用这样的POST时,您可能希望查看body参数上的request字段,该字段将包含已发布的表单。您通常不会对POST次请求使用查询字符串(更多关于here的信息)。所以,这可能看起来像:

def createUser = Action.async { request =>
    val user = request.body.asFormUrlEncoded.get.get("user").head
    Future(Ok())
}

您可能还想使用提供已解析主体的Action.async重载。例如,它可能看起来像:

def createUser = Action.async(parse.urlFormEncoded) { request =>
   //body is already treated as a Map[String, Seq[String]] because of the parameter passed to async
   val user = request.body("user").head 
   Future(Ok())
}