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

मैं ऊपर अनुरोध वस्तु लेने के लिए और प्रपत्र पोस्ट में भेजा कुंजी/मान जोड़े के सभी मिलता है और में एक मानचित्र यह समतल करना चाहते हैं [स्ट्रिंग, स्ट्रिंग]कैसे खेलने के सारे अनुरोध पैरामीटर हो और स्काला के

मैं सभी दस्तावेजों से गुजर चुका हूं और एक मृत अंत में हूं।

यह सुंदर जावा/सर्वलेट मैं में आसान डर लग रहा है, सोच क्यों इस कहीं भी तरह एक साधारण बात पर कोई प्रलेखन है हूँ .. request.getParamterMap की

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

उत्तर

25

Play के बराबर request.queryString जो एक Map[String, Seq[String]] देता है। आप

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

And here is the documentation.

+1

काम करता है .. मैं इस कोड को अपने एक छोटे से अधिक flatmap समाधान की तुलना में अर्थपूर्ण चाहते –

+0

अब आप प्रदान कर सकता हूँ क्वेरी स्ट्रिंग के लिए एक और अनुरोध और कैसे? –

+0

वाह .. मैं स्कैला के लिए नया हूं, क्या आप यह समझाने में दिमाग करेंगे कि आपका 'नक्शा' मामला 'नक्शा [स्ट्रिंग, स्ट्रिंग]' कैसे वापस कर सकता है? – Zennichimaro

9

के साथ एक Map[String, String] करने के लिए इसे समतल कर सकते हैं जिस तरह से है कि किम यह, मैं व्यक्तिगत रूप से एक समारोह की तरह का उपयोग करता है के लिए एक विकल्प के रूप में ..

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

यह नहीं होगा अगर अनुरोध POST विधि का उपयोग कर रहा है तो काम करें। निम्नलिखित कोड का इस्तेमाल किया जा सकता है:

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

आप निम्न का उपयोग करना पड़ सकता है:

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