Scala with Spray Routing - 访问 GET 参数?

Scala with Spray Routing - accessing GET parameters?

我目前正在开发一个使用 Spray 路由在 Scala 中构建的应用程序。

因此,为了处理通过 POST 发送的 JSON 文档,访问正文中的变量非常容易,如下所示;

respondWithMediaType(`application/json`) {
    entity(as[String]) { body =>
        val msg = (parse(body) \ "msg").extract[String]
        val url = (parse(body) \ "url").extractOpt[String]

但是,我现在正尝试使用 GET 编写额外的查询,但在访问随查询发送的参数时遇到了一些问题。

所以,我开场是;

get {
    respondWithMediaType(`application/json`) {
    parameterSeq { params =>
        var paramsList = params.toList

所以,这工作得很好,因为我可以按顺序访问 GET 参数(仅通过访问索引)- 问题是,不幸的是,我认为我们不能期望 GET 参数总是被发送顺序正确。

列表本身以下列格式打印出来;

List((msg,this is a link to google), (url,http://google.com), (userid,13))

有什么简单的方法可以访问这些参数吗?例如,类似于;

var message = paramsList['msg']
println(message) //returns "this is a link to google"

还是我的做法完全错了?

抱歉,如果这是一个愚蠢的问题 - 我最近才切换到 Scala,并且我仍然熟悉它,并重新熟悉 Java。

要构建您的路线,您可以使用 parameters 指令。我不确定这是否是您要查找的内容,无论如何您可以将它们用作:

get {
  parameters('msg) { (msg) =>
    complete(s"The message is '$msg'")
  }
}

喷涂指令可以轻松组合,因此您可以以任何您想要的方式组合它们。

希望对你有帮助。

我通常做的是使用 parameters directive 将数据解析为一个包含所有相关数据的案例 class:

case class MyParams(msg: String, url: String, userId: Int)

parameters(
  "msg".as[String],
  "url".as[String],
  "userId".as[Int]
).as[MyParams] {
  myParams => 
   // Here you have the case class containing all the data, already parsed.
}