2017-05-27 60 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