我使用Jersey客户端2.25.1并且queryParam(...)方法没有正确编码值,例如这种方法失败:
Response response = client.target(uri)
.queryParam("a", "%20") // Translated into space ' '(!)
.queryParam("b", "{") // Will ruin template parsing(!)
.queryParam("c", "}") // Will ruin template parsing(!)
.queryParam("d", URLEncoder.encode(" ", "UTF-8")) // Using explicit encoding will translate ' ' into '+'(!)
.request().get();
所以workaround suggested是这样的:
Response response = client.target(uri)
.queryParam("a", "{a}").resolveTemplate("a", "%20")
.queryParam("b", "{b}").resolveTemplate("b", "{")
.queryParam("c", "{c}").resolveTemplate("c", "}")
.queryParam("d", "{d}").resolveTemplate("d", " ")
.request().get();
这很有效,但令我感到困惑的是,这个非常常见的用例并没有来自Jersey客户端的更好的库支持(?)我希望能够将任意值正确地URL编码为查询参数,这样完全相同的值就会到达服务器端。
这个解决方案有替代品吗?哪个是解决这个问题的首选/最佳方式?