biblioteca di Teone sembra piuttosto n ghiaccio. Ma se vuoi solo un metodo di codifica veloce, ho questo. Tratta i parametri opzionali e riconosce anche JsValues dal spray-json e li stampa in modo compatto prima della codifica. (Coloro che capita di essere le due cose che ho da preoccuparsi, ma si potrebbe facilmente estendere il blocco partita per altri casi si vuole dare un trattamento speciale a)
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("?", "&", "")
}
C'è un modo per utilizzare questo al di fuori di spray? Guardando la fonte sembra che sia abbastanza accoppiato in altre parti dello spray. – Falmarri
Avrete solo bisogno del modulo ['spray-http'] (http://spray.io/documentation/1.2.0/spray-http/) che è piuttosto piccolo. Contiene solo il modello per richieste e risposte HTTP. Non contiene alcun codice server o client. – theon
@theon come usiamo questo Spray Routing? Ecco il mio codice richiesta val: HttpRequest = Get (API) val gasdotto: Futuro [SendReceive] = {{ per Http.HostConnectorInfo (connettore, _) <- IO (HTTP)? Http.HostConnectorSetup (AppnexusSegmentService.AppnexusBaseUrl) } resa SendReceive (connettore) } Await.result (pipeline.flatMap {client => client.apply (richiesta)}, 15.seconds) – Anand