我在我的Android项目中使用带有Jackson转换器的Retrofit 2,并提出以下请求:
@FormUrlEncoded
@PATCH("foo/{id}")
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings") List<String> array);
以下是我传递给接口方法的值:
// the array of strings @Field param
ArrayList<String> arrayOfStrings = new ArrayList<>();
arrayOfStrings.add("1.2");
// the id param
int id = 2;
我运行应用程序,让API调用执行请求,然后通过Charles检索请求。
这是问题所在。请求参数&#34; array_of_strings&#34;正在使用对象引用发送,而不是数组对象的实际值:
// charles request shows:
array_of_strings [I@41fea508
// instead of:
array_of_stings ["1.2"]
如何让Retrofit / Jackson使用数组对象的值而不是对象引用值?
答案 0 :(得分:0)
我想您应该只在[]
字段名称中添加array_of_strings
括号,因此Retrofit会知道您要发送数组并将其正确转换为数组字段:
@FormUrlEncoded
@PATCH("foo/{id}")
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings[]") List<String> array);
答案 1 :(得分:0)
通过rom4ek在此答案中的评论,使用ArrayList<String>
作为参数类型是解决方案。 Jackson必须以不同于数组或列表的方式序列化ArrayLists。
@FormUrlEncoded
@PATCH("foo/{id}")
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings") ArrayList<String> array);