使用Jersey Client 2.x将查询参数添加到WebTarget

时间:2016-08-30 11:32:50

标签: java-8 jersey-2.0 jersey-client

我正在尝试将查询参数添加到Jax-RS(Jersey Client 2.x)的WebTarget中,如下所示

public WebTarget webTarget(String path, Map<String, String> queryMap) {

        WebTarget webTarget = client.target(this.address.getUrl()).path(path);
        if (queryMap != null)
            queryMap.entrySet().forEach(e -> webTarget.queryParam(e.getKey(), e.getValue()));
        return webTarget;

}

问题是WebTarget是不可变的并且每次调用.queryParam()时返回新的WebTarget,但是不能在lambda表达式中使用可变变量来重新分配WebTarget 要在forEach()中使用,我如何在forEach()的每次迭代中捕获不可变的WebTarget(不想在lambda表达式上简单化!!!)

任何帮助表示赞赏!!!

1 个答案:

答案 0 :(得分:3)

尝试使用:

Collections.sort()

但我仍然认为最好每个人使用一个。

public WebTarget webTarget(String path, Map<String, String> queryMap) {
    final WebTarget[] webTarget = {this.client.target(this.address.getUrl()).path(path)};
    if (queryMap != null)
        queryMap.forEach((key, value) -> webTarget[0] = webTarget[0].queryParam(key, value));

    return webTarget[0];
}