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 2

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