2

最终目标是连接两个正在传递给 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")

4

1 回答 1

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)

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

于 2012-08-30T17:39:06.087 回答