2016-08-30 3 views
0

Ich versuche Abfrage params WebTarget von Jax-RS (Jersey-Client 2.x), wie untenHinzufügen Abfrage parms mit Jersey-Client 2.x auf 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; 

} 

Das Problem ist WebTarget ist hinzuzufügen unveränderlich und gibt jedes Mal ein neues WebTarget zurück .queryParam() wird aufgerufen, kann aber keine veränderbaren Variablen innerhalb des Lambda-Ausdrucks verwenden, um das WebTarget innerhalb der forEach() neu zuzuweisen. Wie erfasse ich das unveränderliche WebTarget innerhalb jeder Iteration von forEach() (dont wollen auf die Lambda-Ausdruck Prägnanz verlieren !!!)

jede Hilfe wird geschätzt !!!

Antwort

3

Versuchen zu verwenden:

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

Aber ich denke trotzdem, dass es besser ist, eine für jeden zu verwenden.

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

Dieser Ansatz ist sehr gut, eine generische API zu haben. – sriramdev

Verwandte Themen