[英]Sending array list in a POST request using Retrofit sends the object with the memory address instead of sending the values
[英]Retrofit string array sending object representation instead of value in request.
我在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檢索請求。
這是問題。 請求參數“ array_of_strings”是使用對象引用而不是數組對象的實際值發送的:
// charles request shows:
array_of_strings [I@41fea508
// instead of:
array_of_stings ["1.2"]
如何讓Retrofit / Jackson使用數組對象的值而不是對象引用值?
我想您應該在array_of_strings
字段名稱中添加[]
括號,這樣Retrofit就會知道您將要發送一個數組並將其正確轉換為數組字段:
@FormUrlEncoded
@PATCH("foo/{id}")
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings[]") List<String> array);
通過使用rom4ek在此答案中的注釋,可以使用ArrayList<String>
作為參數類型。 Jackson必須對ArrayLists進行序列化的方式與對數組或List進行序列化的方式不同。
@FormUrlEncoded
@PATCH("foo/{id}")
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings") ArrayList<String> array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.