在Scala中,如何以编程方式构建带有查询字符串参数的URL?
另外,如何将包含带有查询字符串参数的String
的URL解析为允许我以编程方式编辑查询字符串参数的结构?
发布于 2012-11-20 06:23:50
下面的库可以帮助您使用查询字符串参数解析和构建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
发布于 2013-10-27 04:21:36
Spray有一个非常efficient URI parser的特性。用法如下:
import spray.http.Uri
val uri = Uri("http://example.com/test?param=param")
您可以这样设置查询参数:
uri withQuery ("param2" -> "2", "param3" -> 3")
发布于 2013-05-03 07:29:17
席恩的图书馆看起来很不错。但是如果你只是想要一个快速的编码方法,我有这个方法。它处理可选参数,还将识别来自spray-json的JsValues,并在编码前紧凑地打印它们。(这恰好是我必须担心的两件事,但您可以很容易地扩展match块,以便对其他需要特殊处理的情况进行处理)
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("?", "&", "")
}
https://stackoverflow.com/questions/13463387
复制相似问题