2012-11-13 28 views
13
case GET(Path("/rtb_v1/bidrequest")) => Action { implicit request => 

Tôi muốn để có những đối tượng yêu cầu trên và nhận được tất cả các cặp khóa/giá trị được gửi dưới dạng bưu chính, làm phẳng nó thành một bản đồ [String, String]Làm thế nào để có được tất cả các thông số yêu cầu trong Play và Scala

tôi đã trải qua tất cả các tài liệu và đang ở cuối.

này được khá hoảng dễ dàng trong Java/Servlets I; m tự hỏi tại sao không có tài liệu về một điều đơn giản như thế này ở bất cứ đâu .. tương đương

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

Trả lời

25

Play của request.getParamterMaprequest.queryString, mà trả về một Map[String, Seq[String]]. Bạn có thể san bằng nó vào một Map[String, String] với

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

And here is the documentation.

+1

công trình .. tôi thích mã này một chút nó nhiều biểu cảm hơn các giải pháp flatMap –

+0

Bạn có thể gán nay là QueryString để một yêu cầu khác và làm thế nào? –

+0

wow .. Tôi mới đến scala, bạn có thể giải thích cách 'map'' case' của bạn có thể trả về một 'map [string, string]' không? – Zennichimaro

9

Để thay thế cho cách mà Kim hiện nó, cá nhân tôi sử dụng một chức năng như ..

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

Nó sẽ không làm việc nếu yêu cầu đang sử dụng phương thức POST. mã sau đây có thể được sử dụng:

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

Bạn có thể phải sử dụng như sau:

request.queryString.map { case (k,v) => k -> v.mkString }).toSeq: _* 
Các vấn đề liên quan