我正在尝试将查询参数添加到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表达式上简单化!!!)
任何帮助表示赞赏!!!
答案 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];
}