在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,应该直接从自举控制器工作。