2016-02-29 61 views
2

我使用apache URIBuilder爲Rest服務的GET方法構建查詢字符串。URIBuilder和列表查詢參數

@RequestMapping(value="/remote") 
    public Return getTest(Ordine ordine) throws Exception{ 
     ... 
    } 

這是輸入對象:

public class Ordine{  
    private List<String> codici; 
    //..get...set.. 
} 

我不知道如何設置這個字符串列表作爲查詢參數。

我試圖設置PARAM兩次:

URIBuilder builder = new URIBuilder() 
       .setHost("localhost") 
       .setPort(8080) 
       .setScheme("http") 
       .setPath("/remote") 
       .setParameter("codici", codicilist.get(0)) 
       .setParameter("codici", codicilist.get(1)); 

但是,第一個參數將是從第二重寫。 然後我試圖追加[]在參數名:

URIBuilder builder = new URIBuilder() 
       .setHost("localhost") 
       .setPort(8080) 
       .setScheme("http") 
       .setPath("/remote") 
       .setParameter("codici[]", codicilist.get(0)) 
       .setParameter("codici[]", codicilist.get(1)); 

但它只是用名義發送「codici []」和第一個參數被覆蓋。 然後我試圖以逗號分隔值:

URIBuilder builder = new URIBuilder() 
       .setHost("localhost") 
       .setPort(8080) 
       .setScheme("http") 
       .setPath("/remote") 
       .setParameter("codici", String.join(",",codicilist)); 

但如果失敗......我怎麼可以設置PARAM的名單?

回答

1

在你expample輸出,只需使用addParameter代替setParameter。如果它已存在,setParameter將覆蓋您的參數。 addParameter將添加一個新的(忽略現有的)。

1

您可以使用addParameters方法。

URIBuilder builder = new URIBuilder() 
      .setHost("localhost") 
      .setPort(8080) 
      .setScheme("http") 
      .setPath("/remote").addParameters(buildParamList()) 

然後得到一個輔助方法,其中將建設NameValuePair對列表中的所有codici參數值。

private List<NameValuePair> buildParamList() { 
    List<NameValuePair> output = new ArrayList<>(); 
    for (String string : codici) { 
     output.add(new BasicNameValuePair("codici", string)); 
    } 
    return output; 
} 

所以你會得到類似http://localhost:8080/remote?codici=codici1&codici=codici2&codici=codici3因爲codici列表包含codici1codici2codici3