response = restTemplate.exchange(url+"ids=" + ids, HttpMethod.GET, null, String.class);
В вашем клиентском коде это должны быть либо значения, разделенные запятыми ( ids = 1,2,3) , либо несколько объединенных значений ( ids = 1 & ids = 2 & ids = 3 ), но вы передаете целый объект restTemplate.exchange в качестве 1-го аргумента, который будет преобразован с помощью метода toString () и будет выглядеть следующим образом ids = [123, 321] , и он отличается от ожидаемого формата.
Решение с отформатированной строкой
JDK> = 8
String idsAsParam = ids.stream()
.map(Object::toString)
.collect(Collectors.joining(","));
response = restTemplate.exchange(url+"ids=" + idsAsParam, HttpMethod.GET, null, String.class);
JDK <8 </p>
String idsAsParam = ids.toString()
.replace(", ", ",") //remove space after the commas
.replace("[", "") //remove the left bracket
.replace("]", "") //remove the right bracket
.trim(); //remove trailing spaces from partially initialized arrays
response = restTemplate.exchange(url + "ids=" + idsAsParam, HttpMethod.GET, null, String.class);
Решение с RestTemplate
Вы также можете сделать трюк, используя функцию сопоставления с образцом UriTemplate. Он хорошо работает с объектом Map в качестве аргумента. Ключ должен совпадать с ключом URI, а значение должно быть массивом, который можно создать из списка. Пример:
String url = "http://google.com";
List<String> params = Arrays.asList("111", "222", "333");
Map<String, Object> map = new HashMap<>();
map.put("ids[]", params.toArray());
restTemplate.exchange(url + "?ids={ids[]}", HttpMethod.GET, null, String.class, map);
Результаты в
"http://google.com?ids=111,222,333"