In Scalaプログラムでクエリ文字列パラメータを使用してURLを作成するにはどうすればよいですか?
また、クエリ文字列パラメーターを含むURLを含むString
を、プログラムでクエリ文字列パラメーターを編集できる構造に解析するにはどうすればよいですか?
次のライブラリは、クエリ文字列パラメーターを使用してURLを解析および構築するのに役立ちます(免責事項:これは私自身のライブラリです): https://github.com/lemonlabsuk/scala-uri
クエリ文字列を使用してURLを構築するためのDSLを提供します。
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
スプレーには非常に 効率的なURIパーサー があります。使用法は次のようになります。
import spray.http.Uri
val uri = Uri("http://example.com/test?param=param")
クエリパラメータは次のように設定できます。
uri withQuery ("param2" -> "2", "param3" -> 3")
テオンの図書館はかなり素敵に見えます。しかし、急ごしらえのエンコード方法が必要な場合は、これを使用します。オプションのパラメーターを処理し、 spray-json からJsValueを認識し、エンコードする前にそれらをコンパクトに出力します。 (これらは私が心配しなければならない2つのことですが、特別な処理をしたい他の場合のためにマッチブロックを簡単に拡張することができます)
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("?", "&", "")
}
派遣についてはまだ触れられていません。
http://dispatch.databinder.net/Dispatch.html
val myRequest = "http://somehost.com" / "some" / "path" <<? Map("id" -> "12345")
また便利です: https://github.com/mobiworx/urlifier
val url = (http || "some-domain".de) ? german & version(1) & foobar
url.toString