1

需要对我的查询参数进行 MD5 哈希处理!2.0 网络服务请求。这是我用来处理散列的骨架方法:

  def API_SIG(params: Seq[(String,String)]) = {
    val hashParams = params.sortBy(_._1) :+ ("api_secret",API_SECRET)
    getMD5Hash(hashParams.toStringWhateverNativeMethod)
  }

Seq[(String,String)]是将一系列查询参数传递给 Play 的正确类型!网络服务。对于上下文:

  val requestParams = Seq() // nothing here, yet
  val finalParams = Seq(("api_key",API_KEY)) ++ requestParams
  val sigParams = requestParams :+ ("api_secret",API_SECRET)
  val signature = ("sig" -> API_SIG(params))
  val finalQueries = Seq(sigParam) ++ finalParams

  val request = 
    WS
    .url(requestUri)
    .withQueryString(finalQueries:_*)

回顾一下:我基本上需要将 转换Seq[(String,String)]为查询参数字符串,例如param=value&more=better&etc=keepsgoing. 不确定是否播放!有一个本机方法,或者如果有人知道这样做的简单方法。谢谢您的帮助!

4

1 回答 1

3

在 Play 2.0 中没有方便的方法。但是,这是他们在自己的源代码中执行此操作的方式:

params.map(pair => pair._1 + "=" + URLEncoder.encode(pair._2, "UTF-8")).mkString("&")

(更改了变量名称并删除了不必要的部分)。

对于更高级的选项,您还可以在 Apache HttpClient 中使用URLEncodedUtils 。

于 2013-03-27T23:28:44.100 回答