Java 带喷洒路由的Scala-访问GET参数?
我目前正在开发一个内置于Scala中的应用程序,该应用程序带有喷洒路由 因此,对于通过POST发送的JSON文档,访问主体中的变量非常容易,如下所示: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")
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
,您需要参数
。您仍然得到类型不匹配吗?