在Finagle中设置HTTP GET参数

duc*_*thd 4 finagle

在Finagle中,如何以安全,干净的方式创建带有参数的HTTP GET请求请求?

val request = RequestBuilder()
  .url("http://www.example.com/test")
  .addParameter("key", "value")   // this doesn't exist
  .buildGet()
request    // should be a GET request for http://www.example.com/test?key=value
Run Code Online (Sandbox Code Playgroud)

Rob*_*een 8

您可以使用容易混淆的命名Request.queryString:

val request = RequestBuilder()
  .url(Request.queryString("http://www.example.com/test", Map("key" -> "value"))
  .buildGet()
Run Code Online (Sandbox Code Playgroud)


Eva*_*her 2

传递给的参数RequestBuilder.url()预计是完整格式的,因此 Finagle 不提供任何方法来添加更多查询参数。

解决这个问题的一种方法是在链的上下文之外构造一个 URL 对象RequestBuilder。您可以在 a 中定义查询参数Map,将其转换为查询字符串,然后将其连接到基本 URL:

val paramStr = Map("key" -> "value", ...) map { case (k, v) =>
  k + '=' + v
} mkString("?", "&", "")

val request = RequestBuilder.safeBuildGet(
  RequestBuilder.create()
    .url("http://www.example.com/test" + paramsStr)
)
Run Code Online (Sandbox Code Playgroud)

请注意,您需要对在Map.

  • 但这个解决方案并没有转义特殊字符,对吧? (3认同)