2016-08-30 82 views
0

我想查詢參數如下添加查詢參數parms與Jersey客戶端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; 

} 

問題到JAX-RS的WebTarget(Jersey客戶端2.X)是WebTarget是不可變的,並且每次調用.queryParam()時都會返回新的WebTarget,,但是不能在lambda表達式中使用可變變量來重新指定要在forEach()內使用的WebTarget,我如何在forEach()(每次迭代中捕獲不可變WebTarget想在lambda表達簡潔!!! !!!!)

任何幫助表示讚賞!

回答

3

嘗試使用:

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; 
} 
+0

這種方法非常適合具有通用api。 – sriramdev