withFormUrlEncodedBody 的输入数据类型是什么?

What is data type of the input of withFormUrlEncodedBody?

def MakeRequest(method:String,url:String, data : Map[String,String]) = {
    route(FakeRequest(method,url).withHeaders("X-Requested-With" -> "1").withFormUrlEncodedBody(data)).get
  }

错误在 withFormUrlEncodedBody(data)。它表示预期的 (String,String),实际的:Map[String,String]。 (String,String) 数据类型到底是什么?

我使用了 data:(String,String) 但输入只接受 1 个映射。它会接受多重映射。以下代码无需传递参数即可运行:

route(FakeRequest(method,url).withHeaders("X-Requested-With" -> "1").withFormUrlEncodedBody("a" -> "b", "c" -> "d")).get

如果您查看 documentation,您会看到它的类型为 (String, String)*。首先(T1,T2)代表Tuple2[T1,T2]。其次,* 代表可变长度参数,这意味着它接受您要发送的 Tuple2 的数量。这可能是 List 或其他类型的 Seq

因此,以您原来的示例为例,您可以执行以下操作:

def MakeRequest(method:String,url:String, data : (String,String)*) = {
    route(FakeRequest(method,url)
      .withHeaders("X-Requested-With" -> "1")
      .withFormUrlEncodedBody(data:_*)).get
  }