如何为Play合并两个Scala(String,String)!查询字符串?

cro*_*ies 2 scala playframework-2.0

最终目标是连接两个传递给Play的查询参数!网络服务请求.看起来像:

WS
.url(requestUri)
.withQueryString(finalQueries)
Run Code Online (Sandbox Code Playgroud)

我试图使用几个运算符,但它失败了:

val finalQueries = queryParams match {
        case Some(queries) =>
          tokenParam ++ queries
        case None =>
          tokenParam
}
Run Code Online (Sandbox Code Playgroud)

错误: value ++ is not a member of (String, String)

API文档显示withQueryString接受a(String, String)*

我对Play!的withQueryString方法有点困惑,因为它似乎每次访问时都会完全替换整个查询字符串.任何方式来合理地组合查询字符串?

编辑:下面是一个示例查询字符串(类型语法及其最终外观有点令人困惑......):

val queryString = ("timeMin" -> "2012-08-20T01%3A11%3A06.000Z")

Chr*_*ris 8

从你的代码,我觉得queryParams应该是Option[(String, String)],并从错误信息,tokenParam必须是(String, String)
我认为你可以试试这个:

val finalQueries = Seq(tokenParam) ++ queryParams
WS
.url(requestUri)
.withQueryString(finalQueries:_*)
Run Code Online (Sandbox Code Playgroud)

它的工作原理,因为Option可以作为被处理Seq,例如:Seq(1, 2) ++ Some(3)将成为Seq(1, 2, 3)Seq(1, 2) ++ None将成为刚Seq(1, 2)

然后.withQueryString接受一个(String, String)*你可以调用它的方法.withQueryString(param1, param2, andMore),
或者你可以用a来调用它Seq并告诉编译器把它当作任何东西来对待它通过: _*Seq类似的末尾写入来重复.withQueryString(Seq(param1, param2, andMore): _*)