通过改造发布可变数量的ArrayList

时间:2019-03-07 21:56:47

标签: java android retrofit2

我必须发出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调用。我可以看到两个参数的值分别编码为parameter_1%5B%5D,parameter_1%5B%5D,parameter_1%5B%5D和parameter_2%5B%5D,parameter_2%5B%5D。

现在对我来说,下一步是看看我是否可以执行相同的API调用,而不是在Retrofit接口声明中对参数名称进行硬编码,而是动态地执行。 我之前已经完成过此操作,以使可变数量的参数使用FieldMap发送String值。 但是当我创建这样的函数时:

@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。

有什么线索可以解决这个问题吗?还是有替代方法?很高兴提供更多信息。

0 个答案:

没有答案