URIBuilder和列表查询参数

时间:2016-02-29 09:10:09

标签: java web-services rest query-parameters uribuilder

我正在使用apache URIBuilder 为Rest服务的 GET方法构建查询字符串。

=SUMPRODUCT((COUNTIFS($A$2:$A$5,$A$2:$A$5,C2:C5,"")+($B$2:$B$5="Actual")>0)*1,C2:C5)

这是输入对象:

@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));

但它只是简单地发送了名字&#34; codici []&#34;并且第一个参数被覆盖。 然后我尝试了逗号分隔值:

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

但如果失败......我怎样才能设置一个参数列表?

2 个答案:

答案 0 :(得分:2)

在您的示例中,只需使用addParameter代替setParameter。如果参数已存在,setParameter将覆盖您的参数。 addParameter将添加一个新的(忽略现有的)。

答案 1 :(得分:1)

您可以使用addParameters方法。

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

然后使用辅助方法获取所有codici参数值,该方法将构建NameValuePair对的列表。

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

因为codici列表包含codici1codici2codici3

,所以您会得到类似于http://localhost:8080/remote?codici=codici1&codici=codici2&codici=codici3的输出