最终目标是连接两个传递给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")
答案 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): _*)
}