Подтвердить что ты не робот

Request.params отсутствует в Play Framework 2.0

Есть ли способ доступа ко всем параметрам запроса, независимо от метода 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 это уже не так. Request больше не имеет метода params, только queryString и queryString работает только с GET, а не с POST.

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


UPDATE. Возможная работа с использованием Body Parsers.

В зависимости от типа содержимого запроса используется соответствующий синтаксический анализатор, например. application/form-url-encoded vs 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 
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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