URIBuilder и список параметров запроса
Я использую apache URIBuilder чтобы построить строку запроса для метода GET службы Rest.
@RequestMapping(value="/remote")
public Return getTest(Ordine ordine) throws Exception{
...
}
Это объект ввода:
public class Ordine{
private List<String> codici;
//..get...set..
}
Я не могу понять, как установить этот список строк в качестве параметров запроса.
Я пытался установить param дважды:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici", codicilist.get(0))
.setParameter("codici", codicilist.get(1));
Но первый парам будет перезаписан из второго.
Затем я попытался добавить [] в имя param:
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 ответа:
В вашем примере просто используйте
addParameter
вместоsetParameter
.setParameter
переопределит ваш параметр, если он уже существует.addParameter
добавит новый (игнорируя существующие).
Можно использовать метод 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