首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Playframework POST参数

Playframework POST参数
EN

Stack Overflow用户
提问于 2014-11-07 15:58:05
回答 1查看 3.1K关注 0票数 0

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

路由定义

代码语言:javascript
复制
POST    /ff/user                controllers.Application.createUser

控制器

代码语言:javascript
复制
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。我不明白为什么他们是“零”。怎么啦?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-07 16:36:14

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

代码语言:javascript
复制
def createUser = Action.async { request =>
    val user = request.body.asFormUrlEncoded.get.get("user").head
    Future(Ok())
}

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

代码语言:javascript
复制
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())
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26805148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档