2017-05-27 4 views
2

Ich schicke ein Array von ganzen Zahlen an das Backend über diese Retrofit-Schnittstelle senden:Retrofit 2 ein leeres Array

@PATCH("save/ids") 
@FormUrlEncoded 
Call<Output> saveIds(@Field("ids[]") List<Integer> ids); 

Jetzt funktioniert dies, wenn ich ein ArrayList mit einigen Einzelteilen haben. Aber um alle IDs zurückzusetzen wollen die Server ein leeres Array namens ids. Wenn ich ein leeres Array sende, sendet Retrofit das Array nicht - es lässt nur den Parameter fallen.

Ich eröffne mein ArrayList wie folgt:

List<Integer> ids = new ArrayList<>(); 
for (FooObjects object : listOfIds) { 
    if (object.isEnabled()) { 
     ids.add(object.getId()); 
    } 
} 

Wie kann ich trotzdem ein leeres Array schicken?

+0

Was ist _exact_ Nutzlast der Liste, die Sie senden werden? So etwas wie 'ids = [1,2,3]' und 'ids = []'? –

+0

Es sollte ids = [] sein, aber weil das IDs-Array leer ist, sendet Retrofit nicht IDs = []. – user1007522

+0

Sie scheinen also Erwartungen zu haben. Tatsächlich sendet Retrofit 'ids [] = foo & ids [] = bar & ids [] = baz', nicht' ids [] = [foo, bar, baz] '. –

Antwort

1

Der einfachste Weg ist, die Einstellung am Gson-Konverter so zu ändern, dass Nullen serialisiert werden - dies sendet dann "ids":[], wie Sie es wünschen.

Erstellen Sie eine neue Gson Instanz die GsonBuilder mit serializeNulls mit():

private Gson gson = new GsonBuilder().serializeNulls().create(); 

Anschließend können Sie dies mit dem Nachrüst-Builder geben, wenn Sie Ihre Retrofit-Instanz einrichten:

private Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(API_URL) 
       .addConverterFactory(GsonConverterFactory.create(gson)); 

Umfangreiche Konfigurationsoptionen sind verfügbar und in der Gson-Dokumentation aufgeführt: https://github.com/google/gson/blob/master/UserGuide.md