试图解析出一个request.queryString,它返回一个Map [String,Seq [String]]
var route = ""
var queryString = "?"
for((k,v) <- request.queryString) {
if(k == "route"){ route = v.head }
else {
queryString += k +"="+ v.head +"&"
}
}
queryString = queryString.substring(0, queryString.length() -1 );
这很好,但是非常必要。我敢肯定有一种更实用的方法可以做到这一点。有什么帮助吗?
最佳答案
帮助在这里!带有过多的评论。
val RouteKey = "route"
val route = request
.getOrElse(RouteKey, Nil) // will return the route, or empty list
.headOption // either Some[head] or None
.getOrElse("") // if None, empty string
val queryString = (request - RouteKey) // remove the route from the request
.map { case (k, v) => // map each key/value pair
k + "=" + v.headOption.getOrElse("") } // into key=value strings
.mkString("?", "&", "") // make that list into a single string
您会注意到,我使用相同的模式从列表安全地获取
head
,以处理空列表。如果您发现自己做了很多事情,则可以将该方法添加到Seq[String]
中。implicit def pimpedStringSeq(seq: Seq[String]) = new {
def headStr = seq.headOption.getOrElse("")
}
val RouteKey = "route"
val route = request.getOrElse(RouteKey, Nil).headStr
val queryString = (request - RouteKey).map { case (k, v) => k + "=" + v.headStr }
.mkString("?", "&", "")