parsing - Scala-URL con analizador de cadenas de consulta y DSL de generador
query-string (5)
El despacho no ha sido mencionado aún.
http://dispatch.databinder.net/Dispatch.html
val myRequest = "http://somehost.com" / "some" / "path" <<? Map("id" -> "12345")
En Scala, ¿cómo puedo crear una URL con parámetros de cadena de consulta mediante programación?
Además, ¿cómo puedo analizar una String
contiene una URL con parámetros de cadena de consulta en una estructura que me permite editar los parámetros de cadena de consulta mediante programación?
La biblioteca de Theon se ve muy bien. Pero si solo quieres un método de codificación rápida, tengo este. Se ocupa de los parámetros opcionales, y también reconocerá JsValues de spray-json y los imprimirá en forma compacta antes de codificarlos. (Esas son las dos cosas por las que me tengo que preocupar, pero podría extender fácilmente el bloque de coincidencia para otros casos a los que quiera darle un tratamiento especial)
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("?", "&", "")
}
La siguiente biblioteca puede ayudarlo a analizar y crear direcciones URL con parámetros de cadenas de consulta (Descargo de responsabilidad: esta es mi propia biblioteca): https://github.com/lemonlabsuk/scala-uri
Proporciona un DSL para crear URL con cadenas de consulta:
val uri = "http://example.com" ? ("one" -> 1) & ("two" -> 2)
Puede analizar un uri y obtener los parámetros en un Map[String,List[String]]
así:
val uri = parseUri("http://example.com?one=1&two=2").query.params
Spray tiene un analizador de URI muy eficiente . El uso es así:
import spray.http.Uri
val uri = Uri("http://example.com/test?param=param")
Puede configurar los parámetros de consulta de esta manera:
uri withQuery ("param2" -> "2", "param3" -> 3")
También es útil: https://github.com/mobiworx/urlifier
val url = (http || "some-domain".de) ? german & version(1) & foobar
url.toString