URIBuilder和列表查询参数

6
我正在使用 Apache URIBuilder 来构建一个针对 Rest 服务的 GET 方法 的查询字符串。
@RequestMapping(value="/remote") 
    public Return getTest(Ordine ordine) throws Exception{
        ...
    }

这是输入对象:

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

我不明白如何将这个字符串列表设置为查询参数。
我尝试了两次设置参数:
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));

但是如果失败了...我该如何设置参数列表?

2个回答

5
你可以使用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;
}

因此,您将获得类似于http://localhost:8080/remote?codici=codici1&codici=codici2&codici=codici3的输出,假设 codici 列表包含 codici1 codici2 codici3


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接