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

Java 8 使用Jersey客户端2.x向WebTarget添加查询参数,java-8,jersey-2.0,jersey-client,Java 8,Jersey 2.0,Jersey Client,我正在尝试向Jax RS(Jersey Client 2.x)的WebTarget添加查询参数,如下所示 publicWebTargetWebTarget(字符串路径,映射查询映射){ WebTarget WebTarget=client.target(this.address.getUrl()).path(path); if(queryMap!=null) forEach(e->webTarget.queryParam(e.getKey(),e.getValue()); 返回webTarget

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

publicWebTargetWebTarget(字符串路径,映射查询映射){
WebTarget WebTarget=client.target(this.address.getUrl()).path(path);
if(queryMap!=null)
forEach(e->webTarget.queryParam(e.getKey(),e.getValue());
返回webTarget;
}
问题是WebTarget是不可变的,并且每次调用
.queryParam()
时都返回新的WebTarget,但不能在lambda表达式中使用可变变量来重新分配WebTarget以在
forEach()
中使用,如何在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];
}
publicWebTargetWebTarget(字符串路径,映射查询映射){
final WebTarget[]WebTarget={this.client.target(this.address.getUrl()).path(path)};
if(queryMap!=null)
queryMap.forEach((键,值)->webTarget[0]=webTarget[0].queryParam(键,值));
返回webTarget[0];
}
不过,我认为最好是每个人都使用a

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;
}
publicWebTargetWebTarget(字符串路径,映射查询映射){
WebTarget WebTarget=client.target(this.address.getUrl()).path(path);
if(queryMap!=null)
对于(Map.Entry:queryMap.entrySet())
webTarget=webTarget.queryParam(entry.getKey(),entry.getValue());
返回webTarget;
}
尝试使用:

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];
}
publicWebTargetWebTarget(字符串路径,映射查询映射){
final WebTarget[]WebTarget={this.client.target(this.address.getUrl()).path(path)};
if(queryMap!=null)
queryMap.forEach((键,值)->webTarget[0]=webTarget[0].queryParam(键,值));
返回webTarget[0];
}
不过,我认为最好是每个人都使用a

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;
}
publicWebTargetWebTarget(字符串路径,映射查询映射){
WebTarget WebTarget=client.target(this.address.getUrl()).path(path);
if(queryMap!=null)
对于(Map.Entry:queryMap.entrySet())
webTarget=webTarget.queryParam(entry.getKey(),entry.getValue());
返回webTarget;
}

这种方法非常适合拥有通用api。这种方法非常适合拥有通用api。