Java 带喷洒路由的Scala-访问GET参数?

Java 带喷洒路由的Scala-访问GET参数?,java,scala,spray,Java,Scala,Spray,我目前正在开发一个内置于Scala中的应用程序,该应用程序带有喷洒路由 因此,对于通过POST发送的JSON文档,访问主体中的变量非常容易,如下所示: respondWithMediaType(`application/json`) { entity(as[String]) { body => val msg = (parse(body) \ "msg").extract[String] val url = (parse(body) \ "url")

我目前正在开发一个内置于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。

要构建您的路线,您可以使用这些指令。我不确定这是否是您想要的,无论如何,您可以将其用作:

get{
参数('msg){(msg)=>
完成(s“消息为“$msg”)
}
}
Spray指令可以很容易地组合,因此您可以使用任意方式组合它们


希望这对您有所帮助。

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

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.
}

嘿!非常感谢,这似乎是在正确的轨道上-不幸的是,我得到了一个编译时错误回来。scala:173:方法应用的参数太多:(v1:Seq[(String,String)]=>(spray.routing.RequestContext=>Unit))spray.routing.RequestContext=>Unit在特征函数1[error]参数Seq(“msg.as[String],“url.as[String],“userId.”as[String])。as[searchParams]{params=>[error^[error]中发现一个错误[错误](compile:compileIncremental)编译失败为了参考,searchParams被定义为:case class searchParams(msg:String,url:String,userId:String)类型不匹配是什么?您不需要
parameterSeq
,您需要
参数
。您仍然得到类型不匹配吗?