我正在使用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;
}
因此,您将获得类似于 http://localhost:8080/remote?codici=codici1&codici=codici2&codici=codici3 codici
列表包含 codici1
、 codici2
、 codici3
在您的扩展中,只需使用 addParameter
而不是 setParameter
. 如果参数已存在,setParameter
将覆盖该参数。 addParameter
将添加一个新一个(忽略现有的)。