首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URIBuilder和list查询参数

URIBuilder和list查询参数
EN

Stack Overflow用户
提问于 2016-02-29 09:10:09
回答 2查看 23.3K关注 0票数 6

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

代码语言:javascript
复制
@RequestMapping(value="/remote") 
    public Return getTest(Ordine ordine) throws Exception{
        ...
    }

这是输入对象:

代码语言:javascript
复制
public class Ordine{    
    private List<String> codici;
    //..get...set..
}

我无法理解如何将此字符串列表设置为查询参数。

我试过两次设置param:

代码语言:javascript
复制
URIBuilder builder = new URIBuilder()
                .setHost("localhost")
                .setPort(8080)
                .setScheme("http")
                .setPath("/remote")
                .setParameter("codici", codicilist.get(0))
                .setParameter("codici", codicilist.get(1));

但第一个参数将从第二个部分覆盖。然后,我试图在param名称中添加[]:

代码语言:javascript
复制
URIBuilder builder = new URIBuilder()
                .setHost("localhost")
                .setPort(8080)
                .setScheme("http")
                .setPath("/remote")
                .setParameter("codici[]", codicilist.get(0))
                .setParameter("codici[]", codicilist.get(1));

但是它只是以"codici[]“的名字发送,并且第一个param被覆盖。然后我尝试了一个逗号分隔的值:

代码语言:javascript
复制
URIBuilder builder = new URIBuilder()
                .setHost("localhost")
                .setPort(8080)
                .setScheme("http")
                .setPath("/remote")
                .setParameter("codici", String.join(",",codicilist));

但如果失败了..。我怎样才能设置一个param的列表?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-29 10:12:37

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

票数 4
EN

Stack Overflow用户

发布于 2016-02-29 09:51:33

您可以使用addParameters方法。

代码语言:javascript
复制
URIBuilder builder = new URIBuilder()
            .setHost("localhost")
            .setPort(8080)
            .setScheme("http")
            .setPath("/remote").addParameters(buildParamList())

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

代码语言:javascript
复制
private List<NameValuePair> buildParamList() {
    List<NameValuePair> output = new ArrayList<>();
    for (String string : codici) {
        output.add(new BasicNameValuePair("codici", string));
    }
    return output;
}

因此,如果codici列表包含codici1codici2codici3,您将得到一个类似于codici1的输出

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35695586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档