2012-11-19 18 views

Odpowiedz

13

Poniższy biblioteka może pomóc analizować i budować adres URL parametrów ciąg kwerendy (Zastrzeżenie: To jest moja własna biblioteka): https://github.com/lemonlabsuk/scala-uri

Zapewnia DSL do budowania adresów URL z ciągów zapytań:

val uri = "http://example.com" ? ("one" -> 1) & ("two" -> 2) 

można analizować URI i uzyskać parametry do Map[String,List[String]] tak:

val uri = parseUri("http://example.com?one=1&two=2").query.params 
4

biblioteka Theon wygląda całkiem n lód. Ale jeśli chcesz po prostu metodę kodowania szybkiego, mam to. Zajmuje się parametrami opcjonalnymi, a także rozpoznaje parametry JsValues ​​z spray-json i kompaktowe je wydrukuje przed kodowaniem. (Ci, zdarzyć się dwie rzeczy muszę się martwić, ale można łatwo rozszerzyć blok dopasowania dla pozostałych przypadkach chcesz dać do specjalnego traktowania)

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("?", "&", "") 
} 
15

Spray ma bardzo efficient URI parser. Użycie jest tak:

import spray.http.Uri 
val uri = Uri("http://example.com/test?param=param") 

Można ustawić params kwerendy tak:

uri withQuery ("param2" -> "2", "param3" -> 3") 
+0

Czy istnieje sposób, aby korzystać z tej poza sprayu? Patrząc na źródło wydaje się, że jest dość sprzężony z innymi częściami sprayu. – Falmarri

+0

Będziesz potrzebował tylko bardzo małego modułu ['spray-http'] (http://spray.io/documentation/1.2.0/spray-http/). Zawiera tylko model dla żądań HTTP i odpowiedzi. Nie zawiera żadnego kodu serwera ani klienta. – theon

+0

@theon jak korzystać z tego Routing Spray? Oto mój kod żądania val: HttpRequest = get (API) val rurociąg: Przyszłość [SendReceive] = {{ dla Http.HostConnectorInfo (złącza, _) <- IO (HTTP)? Http.HostConnectorSetup (AppnexusSegmentService.AppnexusBaseUrl) } wydajność sendReceive (łącznik) } Await.result (pipeline.flatMap {klienta => client.apply (wniosek)} 15.seconds) – Anand