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

Как получить все параметры запроса в Play и Scala

 case GET(Path("/rtb_v1/bidrequest")) => Action {  implicit request =>

Я хочу взять объект запроса выше и получить все пары ключ/значение, отправленные в сообщении формы, и сгладить его в Map [String, String]

Я просмотрел все документы, и я в тупике.

Это довольно freaking в Java/Servlets. Я удивляюсь, почему нет документации по простой вещи, как это нигде.

Map<String, String[]> parameters = request.getParameterMap();
4b9b3361

Ответ 1

Воспроизводимый эквивалент request.getParamterMap - request.queryString, который возвращает Map[String, Seq[String]]. Вы можете сгладить его до Map[String, String] с помощью

request.queryString.map { case (k,v) => k -> v.mkString }

И вот документация.

Ответ 2

В качестве альтернативы тому, как это делает Ким, я лично использую такую ​​функцию, как..

def param(field: String): Option[String] = 
  request.queryString.get(field).flatMap(_.headOption)

Ответ 3

Он не будет работать, если запрос использует метод POST. Можно использовать следующий код:

req.body match {
  case AnyContentAsFormUrlEncoded(params) ⇒
    println(s"urlEncoded = $params")
  case mp @ AnyContentAsMultipartFormData(_) ⇒
    println(s"multipart = ${mp.asFormUrlEncoded}")
}

Ответ 4

Возможно, вам придется использовать следующее:

request.queryString.map { case (k,v) => k -> v.mkString }).toSeq: _*