Tob*_*bia 6 java rest web-services query-parameters uribuilder
我正在使用 apache URIBuilder为Rest 服务的GET 方法构建查询字符串。
@RequestMapping(value="/remote")
public Return getTest(Ordine ordine) throws Exception{
...
}
Run Code Online (Sandbox Code Playgroud)
这是输入对象:
public class Ordine{
private List<String> codici;
//..get...set..
}
Run Code Online (Sandbox Code Playgroud)
我无法理解如何将此字符串列表设置为查询参数。
我试图设置参数两次:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici", codicilist.get(0))
.setParameter("codici", codicilist.get(1));
Run Code Online (Sandbox Code Playgroud)
但是第一个参数会被第二个参数覆盖。然后我尝试在参数名称中附加 []:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici[]", codicilist.get(0))
.setParameter("codici[]", codicilist.get(1));
Run Code Online (Sandbox Code Playgroud)
但它只是以名称“codici[]”发送,第一个参数被覆盖。然后我尝试了一个逗号分隔值:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici", String.join(",",codicilist));
Run Code Online (Sandbox Code Playgroud)
但如果失败......我如何设置参数列表?
您可以使用addParameters方法。
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote").addParameters(buildParamList())
Run Code Online (Sandbox Code Playgroud)
然后codici使用辅助方法获取所有参数值,该方法将构建一个对列表 NameValuePair。
private List<NameValuePair> buildParamList() {
List<NameValuePair> output = new ArrayList<>();
for (String string : codici) {
output.add(new BasicNameValuePair("codici", string));
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
因此,您将得到类似于http://localhost:8080/remote?codici=codici1&codici=codici2&codici=codici3 的输出,因为该codici列表包含codici1, codici2,codici3
小智 4
在您的示例中,只需使用addParameter而不是setParameter. setParameter如果参数已经存在,将覆盖您的参数。addParameter将添加一个新的(忽略现有的)。
| 归档时间: |
|
| 查看次数: |
16838 次 |
| 最近记录: |