Перейти к содержимому

Как передать массив в get запросе

  • автор:

Как передать массив как параметр строки GET-запроса в Java (Spring)?

Цель — сделать api более RESTful. Для получения ресурсов должен использоваться метод GET, но для получения списка ресурсов в контроллер должен передаваться фильтр такого вида:

@Data public class Filter < private int limit; private Listsort; public Filter(int limit, List sort) < this.limit = limit; this.sort = sort; >> 
@Data public class Sort

Из-за наличия списка List внутри фильтра, возникают проблемы с получением его в контроллере. Тщательно изучив мануал и вопрос на тему передачи объектов в строке GET-запроса, мне так и не удалось добиться успеха. По-прежнему неясно, в каком виде надо передать массив с клиента, и что сделать на сервере, чтобы он его увидел как список (происходят разного вида ошибки при маппинге фильтра). Использую такую стратегию (для получения всего, кроме списка): Контроллер:

@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public List getList(@RequestParam("filter") String filterJson) < ObjectMapper mapper = new ObjectMapper(); Filter filter = null; try < filter = mapper.readValue(filterJson, Filter.class); >catch (IOException e) < e.printStackTrace(); >return getSomeDtos(filter); > 

Запрос с клиента:

http://localhost:3000/some-api?filter=%7B%22limit%22:10,%22sort%22:null%7D 

Уважаемые знатоки, вопрос — в каком виде надо передать List<> в фильтре в строке GET-запроса?

Как передать массив в url?

Нужно чтобы в $stateParams[element], элементом был массив/объект.
Для себя пока придумал только /request?params=
И поработать со строкой, есть ли вариант какой то не строковый?

  • Вопрос задан более трёх лет назад
  • 6259 просмотров

Комментировать
Решения вопроса 1

NaN

есть ли вариант какой то не строковый?

GET это строка. Причем еще и с ограничением по длине. Разным.
stackoverflow.com/questions/417142/what-is-the-max.

У вас правильный вариант.

Как передать массив в get запросе

(0) Если нужно передавать массив, то нужно делать POST запрос. И в теле запроса уже передавать что хочешь.

Если в документации написано, что используется GET-запрос, то все равно можно сделать POST запрос?
(0) приведи строку запроса.
Иногда сервер понимает так: ?filter[ids]=1&filter[ids]=2

(4) Ну. Тогда в документации должно быть указано за то «как в запросе GET указать параметр запроса типа массив?»

не указано это в документации. Написано только тип параметра массив
(3) Можно и через GET, если массив не большой и вместится в 4кб
(4) Вряд ли
(10) что смысл?
(11) в запросе GET указать параметр запроса типа массив
(12) в документации указано, что запрос GET и параметр массив
можеть быть как
&filter=[1, 2, 3]
(13) ты к 1с подключаешься?
нет, не к 1с. Надо с сайта получить данные
(16) АдресСтраницы = «твой сайт/hs/твой хттп сервис /твой массив
(16) массивы я помню в пхп легко передаются в параметрах, только их нужно правильно создать
(13) приведи фрагмент документации или ссылку на всю
(16) Ты главное не говори что за сайт и какой запрос ты хочешь отправить

Фильтр = Новый Массив;
Фильтр.Добавить(1);
Фильтр.Добавить(3);

ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить(«filter», Фильтр);

Передача массива методом GET

Решение:
Передать массив методом GET на другую страницу можно через параметры строки запроса. Запрос должен быть вида: 2.php?arr[]=value1&arr[]=value2&arr[]=value3. . Где value1 — это первый элемент массива, value2 — это второй элемент массива и т.д.

Файл 2.php

// Распечатываем массив echo "
"; print_r($_GET); echo "

";

implode — Объединяет элементы массива в строку.

string implode( string glue, array pieces ) Возвращает строку, полученную объединением строковых представлений элементов массива pieces, со вставкой строки glue между соседними элементами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *