2017-05-27 48 views
2

我通過這個更新接口發送整數數組到後端:改造2發送一個空數組

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

現在這個工程時,我有一些項目的ArrayList。 但要重置所有ID,服務器需要一個名爲ids的空數組。 當我發送一個空數組時,Retrofit不會發送數組 - 它只是丟棄參數。

創建我ArrayList如下:

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

我怎麼能要送出一個空數組?

+0

什麼是您要發送列表的_exact_有效內容?類似於'ids = [1,2,3]'和'ids = []'? –

+0

它應該是ids = []但是因爲ids數組是空的,改裝不發送ids = []。 – user1007522

+0

所以你似乎有期待:事實上,Retrofit會發送'ids [] = foo&ids [] = bar&ids [] = baz',而不是'ids [] = [foo,bar,baz]''。 –

回答

1

最簡單的方法是更改​​Gson轉換器上的設置,以便將空值序列化 - 然後將發送"ids":[],如您所願。

創建使用GsonBuilder與serializeNulls()的新GSON實例:

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

然後,您可以把它傳遞給改造建設者,當你設置你的改裝實例:

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

廣泛配置選項可用,並在Gson文檔中列出:https://github.com/google/gson/blob/master/UserGuide.md