使用 Jersey 客户端向 WebTarget 添加查询参数 2.x

Adding query parms to WebTarget with Jersey Client 2.x

我正在尝试将查询参数添加到 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 是不可变的 和 returns 每次调用 .queryParam() 新的 WebTarget,但不能在内部使用可变变量重新分配要在 forEach() 中使用的 WebTarget 的 lambda 表达式,我如何在 forEach() 的每次迭代中捕获不可变的 WebTarget(不想失去 lambda 表达式的简洁性!! !)

感谢任何帮助!!!

尝试使用:

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];
}

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

public WebTarget webTarget(String path, Map<String, String> queryMap) {
    WebTarget webTarget = client.target(this.address.getUrl()).path(path);
    if (queryMap != null)
        for (Map.Entry<String, String> entry: queryMap.entrySet())
            webTarget = webTarget.queryParam(entry.getKey(), entry.getValue());
    return webTarget;
}