Ответ 1
Воспроизводимый эквивалент request.getParamterMap
- request.queryString
, который возвращает Map[String, Seq[String]]
. Вы можете сгладить его до Map[String, String]
с помощью
request.queryString.map { case (k,v) => k -> v.mkString }
case GET(Path("/rtb_v1/bidrequest")) => Action { implicit request =>
Я хочу взять объект запроса выше и получить все пары ключ/значение, отправленные в сообщении формы, и сгладить его в Map [String, String]
Я просмотрел все документы, и я в тупике.
Это довольно freaking в Java/Servlets. Я удивляюсь, почему нет документации по простой вещи, как это нигде.
Map<String, String[]> parameters = request.getParameterMap();
Воспроизводимый эквивалент request.getParamterMap
- request.queryString
, который возвращает Map[String, Seq[String]]
. Вы можете сгладить его до Map[String, String]
с помощью
request.queryString.map { case (k,v) => k -> v.mkString }
В качестве альтернативы тому, как это делает Ким, я лично использую такую функцию, как..
def param(field: String): Option[String] =
request.queryString.get(field).flatMap(_.headOption)
Он не будет работать, если запрос использует метод POST. Можно использовать следующий код:
req.body match {
case AnyContentAsFormUrlEncoded(params) ⇒
println(s"urlEncoded = $params")
case mp @ AnyContentAsMultipartFormData(_) ⇒
println(s"multipart = ${mp.asFormUrlEncoded}")
}
Возможно, вам придется использовать следующее:
request.queryString.map { case (k,v) => k -> v.mkString }).toSeq: _*