Вопрос по url, query-string, scala, dsl, parsing – Scala - URL с парсером Query String и построителем DSL

18

В Scala как программно создать URL с параметрами строки запроса?

Также как я могу разобратьString содержит URL с параметрами строки запроса в структуру, которая позволяет мне редактировать параметры строки запроса программно?

Ваш Ответ

5   ответов
4

ого кодирования, у меня есть этот. Он имеет дело с необязательными параметрами, а также распознает JsValues изспрей-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("?", "&", "")
}
0

https://github.com/mobiworx/urlifier

val url = (http || "some-domain".de) ? german & version(1) & foobar
url.toString
15

Спрей имеет оченьэффективный парсер URI, Использование примерно так:

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

Вы можете установить параметры запроса следующим образом:

uri withQuery ("param2" -> "2", "param3" -> 3")
Так как это зависимая область действия, вы можете опустить его, и код синтаксического анализа Uri все еще может работать. Все еще странно, хотя. theon
Хороший вопрос @RichardGomes. Я был удивлен, учитываяspray-http предназначен только для модели структур данных HTTP. Почему этонужна акка? theon
Spray-http зависит от Akka :-( ... Вытаскивание такого рода зависимости только для разбора URI выглядит как чрезмерная инженерия. Richard Gomes
Есть ли способ использовать это вне спрея? Глядя на источник, кажется, что этоЭто очень связано с другими частями брызг. Falmarri
0

http://dispatch.databinder.net/Dispatch.html

val myRequest = "http://somehost.com" / "some" / "path" <<!--? Map("id" ---> "12345")
Привет, @Ashalynd! URL кажется неработающим Zoltán
13

параметрами строки запроса (Отказ от ответственности: это моя собственная библиотека):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

Похожие вопросы