Request.params пропал в Play Framework 2.0 - PullRequest
38 голосов
/ 21 марта 2012

Есть ли способ получить доступ ко всем параметрам запроса, независимо от метода HTTP? Я вылил документацию и API, не находя пути в Play Framework 2.0.

У меня есть поиск на сайте, который принимает POST и GET. Пользовательское отслеживание на сайте проверяет все переданные параметры, чтобы определить правильный способ хранения данных отслеживания.

В Play Framework 1.2.x мне удалось получить доступ к параметрам из запроса в контроллере с помощью

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

С Play Framework 2.0 это уже не так. Запрос больше не имеет метода params, только queryString, а queryString работает только с GET, а не с POST.

Невозможно определить каждый возможный параметр отслеживания в действии контроллера, они являются динамическими.


ОБНОВЛЕНИЕ : Возможный обходной путь - использование Анализаторы тела .

В зависимости от типа содержимого запроса используется соответствующий анализатор, например, application / form-url-кодированный против application / json

Это грубая карта, которая объединяет параметры POST и параметры GET, причем параметры 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 

Ответы [ 2 ]

9 голосов
/ 08 ноября 2012

Документация Play 2.0 не очень хорошо объясняет это.Анализаторы тела являются приемлемым решением, но я нашел DynamicForm намного более легким и удобным для пользователя.

Документацию можно найти здесь .

InВ частности, DynamicForm.bindFromRequest() - хорошее место для старта, если вы пытаетесь заменить старую Play 1.0 request.params.get().

4 голосов
/ 27 ноября 2013
ctx()._requestHeader().getQueryString("q").get();

это не требует дополнительного импорта и должно работать прямо из загрузочного контроллера.

...