Опубликовать переменное количество списков массивов с модификацией - PullRequest
0 голосов
/ 08 марта 2019

Я должен сделать POST-запрос, чтобы отправить переменные числа ArrayList на сервер. Вот пример того, как может выглядеть полезная нагрузка

parameter_1 : [1,2,3]
parameter_2 : ["one", "two", "three"]

имена параметров и их количество заранее неизвестны.

Я создал тестовый пример, используя следующий метод

@FormUrlEncoded
@POST(register)
Call<TestApiResponse> TestApiCall(
        @Field("parameter_1[]") ArrayList<Integer> parameterOne,
        @Field("parameter_2[]") ArrayList<String> parameterTwo
);

и я назвал эту функцию так:

ArrayList<String> param1 = new ArrayList<Integer>();
param1.add(1); param1.add(2); param1.add(3);
ArrayList<String> param2 = new ArrayList<String>();
param2.add("one"); param2.add("two");

и затем я перехватил вызов API для модификации. Я вижу, что значения кодируются как параметр_1% 5B% 5D, параметр_1% 5B% 5D, параметр_1% 5B% 5D и параметр_2% 5B% 5D, параметр_2% 5B% 5D, соответственно для обоих параметров.

Теперь следующим шагом для меня будет посмотреть, смогу ли я сделать тот же вызов API, но вместо того, чтобы жестко кодировать имена параметров в декларации интерфейса Retrofit, делать это динамически. Я делал это раньше для переменного количества параметров для отправки значений String с использованием FieldMap. Но когда я создаю такую ​​функцию:

@FormUrlEncoded
@POST(register)
Call<LoginResponse> registerUserWithoutAvatar2(
        @FieldMap Map<String, ArrayList<String>> arrayParameters,
);

Я вызываю эту функцию следующим образом

Map<String, ArrayList<String>> param = new HashMap<>();
ArrayList<String> param1 = new ArrayList<String>();
param1.add(1); param1.add(2); param1.add(3);
param.put("parameter_1[]", param1)

когда я перехватываю вызов API, я вижу, что Retrofit закодировал поле как один параметр param_1% 5B% 5D, а его значение представляет собой закодированную строку, разделенную запятыми, которая выглядит как 1% 2C2% 2C3.

Любая подсказка, как я мог это исправить? или если есть альтернативный подход? Рады предоставить больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...