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.
}
我目前正在开发一个使用 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.
}