URIBuilder 和列表查询参数
URIBuilder and list query params
我正在使用 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));
但是如果失败...我该如何设置参数列表?
你可以使用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
列表包含 codici1
、codici2
、codici3
,那么您将得到类似于 http://localhost:8080/remote?codici=codici1&codici=codici2&codici=codici3 的输出
在您的示例中,只需使用 addParameter
而不是 setParameter
。 setParameter
将覆盖您的参数(如果它已存在)。 addParameter
将添加一个新的(忽略现有的)。
我正在使用 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));
但是如果失败...我该如何设置参数列表?
你可以使用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
列表包含 codici1
、codici2
、codici3
在您的示例中,只需使用 addParameter
而不是 setParameter
。 setParameter
将覆盖您的参数(如果它已存在)。 addParameter
将添加一个新的(忽略现有的)。