使用Jersey客户端查询参数编码

时间:2017-11-20 22:08:53

标签: jersey-2.0 jersey-client

我使用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编码为查询参数,这样完全相同的值就会到达服务器端。

这个解决方案有替代品吗?哪个是解决这个问题的首选/最佳方式?

0 个答案:

没有答案