Scala - URL с Query String Parser и Builder DSL
В Scala как я могу создать URL-адрес с параметрами строки запроса программно?
Также как я могу проанализировать String
, содержащий URL-адрес с параметрами строки запроса, в структуру, которая позволяет мне программно изменять параметры строки запроса?
Ответы
Ответ 1
Следующая библиотека может помочь вам разобрать и создать URL-адреса с параметрами строки запроса (Отказ от ответственности: это моя собственная библиотека): https://github.com/lemonlabsuk/scala-uri
Он предоставляет DSL для построения URL-адресов с строками запросов:
val uri = "http://example.com" ? ("one" -> 1) & ("two" -> 2)
Вы можете проанализировать uri и получить параметры в Map[String,List[String]]
следующим образом:
val uri = parseUri("http://example.com?one=1&two=2").query.params
Ответ 2
Spray имеет эффективный синтаксический анализатор URI . Использование выглядит так:
import spray.http.Uri
val uri = Uri("http://example.com/test?param=param")
Вы можете установить параметры запроса так:
uri withQuery ("param2" -> "2", "param3" -> 3")
Ответ 3
Библиотека Theon выглядит довольно красиво. Но если вы просто хотите метод быстрого кодирования, у меня есть этот. Он обрабатывает необязательные параметры, а также распознает JsValues из spray-json и компактно печатает их перед кодированием. (Те, о которых я должен беспокоиться, могут быть разными, но вы можете легко расширить блок соответствия для других случаев, которые вы хотите предоставить для специальной обработки)
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("?", "&", "")
}
Ответ 4
Отправка еще не указана.
http://dispatch.databinder.net/Dispatch.html
val myRequest = "http://somehost.com" / "some" / "path" <<? Map("id" -> "12345")
Ответ 5
также полезно: https://github.com/mobiworx/urlifier
val url = (http || "some-domain".de) ? german & version(1) & foobar
url.toString