Request.params在Play Framework 2.0中消失了

mgu*_*mon 38 playframework-2.0

有没有办法访问所有请求参数,无论HTTP方法如何?我没有在Play Framework 2.0中找到方法,而是倾倒了文档和api.

我在一个接受POST和GET的网站上搜索.站点上的自定义跟踪会检查传入的所有参数,以确定存储跟踪数据的正确方法.

在Play Framework 1.2.x中,我能够从Controller中的请求访问参数

request.params.get("keywords")
request.params.get("location") 
request.params.all()
Run Code Online (Sandbox Code Playgroud)

使用Play Framework 2.0,情况已不再如此.该请求不再有方法params,只有queryString和查询字符串只适用于GET和POST没有.

将每个可能的跟踪参数定义到Controller Action中是不可行的,它们是动态的.


更新:可能的解决方法是使用Body Parsers.

根据请求的内容类型,使用适当的解析器,例如application/form-url-encodedapplication/json

这是结合POST参数和GET参数的原始Map,GET参数优先.

val params: collection.mutable.Map[String, Seq[String]] = collection.mutable.Map() 
params ++= request.body.asFormUrlEncoded.getOrElse[Map[String, Seq[String]]] { Map.empty } 
params ++= request.queryString 
Run Code Online (Sandbox Code Playgroud)

小智 9

Play 2.0文档没有很好地解释这一点.身体解析器是一个可接受的解决方案,但我发现DynamicForm它更轻巧,用户友好.

文档可以在这里找到.

特别是,DynamicForm.bindFromRequest()如果您尝试更换旧的Play 1.0 ,这是一个很好的起点request.params.get().

  • @zjffdu form()方法移动到play.data.Form.form(),因此你应该将它用作Form.form().https://github.com/playframework/Play20/blob/master/documentation/manual/Migration.md#playmvccontrollerform-renamed-to-playdataformform (3认同)
  • @fabspro form()方法在哪里,我应该导入哪个类或包? (2认同)