在Play Framework 2.0中Request.params不见了

有没有办法访问所有的请求参数,无论HTTP方法? 我没有在Play Framework 2.0中find方法,而是倾注了文档和API。

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

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

request.params.get("keywords") request.params.get("location") request.params.all() 

使用Play Framework 2.0,情况已经不复存在。 请求不再有方法params ,只有queryString和queryString只能使用GET而不是POST。

在Controller Action中定义每个可能的跟踪参数是不可行的,它们是dynamic的。


更新 :一个可能的解决方法是使用身体parsing器 。

根据请求的内容types,使用适当的parsing器,例如application / form-url-encoded vs application / 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 

Play 2.0文档没有解释得很好。 身体parsing器是一个可以接受的解决scheme,但我发现DynamicForm更轻量级和用户友好。

文档可以在这里find。

特别是,如果您试图replace旧的Play 1.0 request.params.get()DynamicForm.bindFromRequest()是一个很好的开始。

 ctx()._requestHeader().getQueryString("q").get(); 

这不需要任何额外的import,应该直接从自举控制器工作。