2016-07-19 3 views
0

Ich bin mit Retrofit 2 mit Jackson-Wandler in meinem Android-Projekt mit der folgenden Anforderung:String-Array nachrüsten Senden der Objektdarstellung anstelle des Werts in der Anforderung.

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

Hier sind die Werte, die ich an die Interface-Methode übergeben:

// the array of strings @Field param 
ArrayList<String> arrayOfStrings = new ArrayList<>(); 
arrayOfStrings.add("1.2"); 
// the id param 
int id = 2; 

ich die app laufen, Lassen Sie den Request vom API-Aufruf ausführen und rufen Sie dann die Anforderung über Charles ab.

Hier ist das Problem. Die Anfrage param „array_of_strings“ wird mit der Objektreferenz gesendet wird, nicht der tatsächliche Wert der Array-Objekte:

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

Wie erhalte ich Retrofit/Jackson den Wert des Arrays verwenden Objekte anstelle der Objektreferenz Wert?

+0

Wie sollte der Körper aussehen? – Blackbelt

Antwort

0

Via rom4ek Kommentar in Diese Antwort unter Verwendung von ArrayList<String> als Parametertyp war die Lösung. Jackson muss ArrayLists anders als Arrays oder Listen serialisieren.

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

Ich denke, man sollte nur [] Klammern array_of_strings Feldnamen hinzufügen, so Retrofit wird wissen, dass Sie ein Array senden gehen und wird es richtig Array-Feld verwandeln:

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

Tolle Idee. Das habe ich auch versucht. Das gleiche Ergebnis ist passiert. – levibostian

+1

Hm, könnten Sie versuchen, 'List ' in 'ArrayList ' in Parameter der Methode zu ändern? – rom4ek

Verwandte Themen