2016-07-19 5 views
0

私は、次の要求と私のAndroidのプロジェクトでジャクソンコンバータとレトロフィット2を使用しています:ここで要求に値の代わりにオブジェクト表現を送信するRetrofit文字列配列。

@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経由でリクエストを取得します。

ここが問題です。要求のparam「array_of_strings」配列オブジェクトの実際の値は、オブジェクト参照を使用していない送信されている:

// charles request shows: 
array_of_strings [[email protected] 
// instead of: 
array_of_stings ["1.2"] 

私はレトロフィット/ジャクソンは配列オブジェクトの値の代わりに、オブジェクト参照を使用して取得するにはどうすればよいです値?

+0

体はどのように見えますか? – Blackbelt

答えて

0

でrom4ekさんのコメントビアこの答えは、パラメータタイプとしてArrayList<String>を使用して解決策でした。 Jacksonは配列やリストとは違ってArrayListを直列化する必要があります。

@FormUrlEncoded 
@PATCH("foo/{id}") 
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings") ArrayList<String> array); 
0

私はレトロフィットは、あなたが配列を送信しようとしていることを知っているだろうし、適切に配列フィールドにそれを変換しますので、あなただけの、array_of_stringsフィールド名に[]ブラケットを追加する必要がありますね:

@FormUrlEncoded 
@PATCH("foo/{id}") 
Call<FooModel> apiCallWithArrayOfStrings(@Path("id") int id, @Field("array_of_strings[]") List<String> array); 
+1

素晴らしいアイデア。私もそれを試みました。同じ結果が起こった。 – levibostian

+1

ええ、メソッドのパラメータで 'List 'を 'ArrayList 'に変更しようとしましたか? – rom4ek

関連する問題