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