Scala with Spray Routing - 访问GET参数?

时间:2017-03-07 12:32:34

标签: java scala spray

我目前正在开发使用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。

2 个答案:

答案 0 :(得分:1)

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

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

Spray指令可以轻松编写,因此您可以使用任何您想要的方式组合它们。

我希望能帮助你。

答案 1 :(得分:1)

我通常使用parameters directive将数据解析为包含所有相关数据的案例类:

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.
}
相关问题