Theons Bibliothek sieht ziemlich n Eis. Aber wenn Sie nur eine Quickie-Encode-Methode wollen, habe ich diese. Es behandelt optionale Parameter und erkennt auch JsValues von spray-json und komprimiert sie vor dem Kodieren. (Diejenigen, passieren die beiden Dinge, die ich darum kümmern müssen, aber man konnte das Spiel Block für andere Fälle, die Sie leicht erweitern möchten, eine besondere Behandlung geben)
import java.net.URLEncoder
def buildEncodedQueryString(params: Map[String, Any]): String = {
val encoded = for {
(name, value) <- params if value != None
encodedValue = value match {
case Some(x:JsValue) => URLEncoder.encode(x.compactPrint, "UTF8")
case x:JsValue => URLEncoder.encode(x.compactPrint, "UTF8")
case Some(x) => URLEncoder.encode(x.toString, "UTF8")
case x => URLEncoder.encode(x.toString, "UTF8")
}
} yield name + "=" + encodedValue
encoded.mkString("?", "&", "")
}
Gibt es eine Möglichkeit, diese außerhalb der Spray zu benutzen? Wenn man die Quelle ansieht, sieht es so aus, als wäre sie in andere Teile von Spray eingekoppelt. – Falmarri
Sie benötigen nur das ['spray-http'] (http://spray.io/documentation/1.2.0/spray-http/) Modul, das ziemlich klein ist. Es enthält nur das Modell für HTTP-Anfragen und Antworten. Es enthält keinen Server- oder Clientcode. – theon
@theon Wie verwenden wir dieses Spray Routing? Hier ist mein Code val Anfrage: Httprequest = Get (api) val Pipeline: Zukunft [SendReceive] = { für { Http.HostConnectorInfo (Stecker, _) <- IO (Http)? Http.HostConnectorSetup (AppnexusSegmentService.AppnexusBaseUrl) } Ausbeute SendReceive (Stecker) } Await.result (pipeline.flatMap {client => client.apply (request)}, 15.seconds) – Anand