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

时间:2012-08-30 17:28:46

标签: scala playframework-2.0

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

WS
.url(requestUri)
.withQueryString(finalQueries)

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

val finalQueries = queryParams match {
        case Some(queries) =>
          tokenParam ++ queries
        case None =>
          tokenParam
}

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

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

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

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

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

1 个答案:

答案 0 :(得分:8)

从您的代码中可以看出,queryParams应为Option[(String, String)],并且在错误消息中,tokenParam必须为(String, String)
我想你可以试试这个:

val finalQueries = Seq(tokenParam) ++ queryParams
WS
.url(requestUri)
.withQueryString(finalQueries:_*)

它有效,因为Option可以被视为Seq,例如:Seq(1, 2) ++ Some(3)将变为Seq(1, 2, 3)Seq(1, 2) ++ None将只是Seq(1, 2) < / p>

然后.withQueryString接受(String, String)*表示您可以将其称为.withQueryString(param1, param2, andMore)
或者您可以使用Seq来调用它,并告诉编译器将其视为 anythingRepeated ,方法是在: _*的{​​{1}}末Seq处写.withQueryString(Seq(param1, param2, andMore): _*) }