使用 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;
}
我正在尝试将查询参数添加到 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;
}