我正在发送此邮件:
@FormUrlEncoded
@PUT("Devices/{id}")
Call<Device> updateDeviceSync(
@Path("id") String id,
@Field("fieldName1") Integer fieldName1,
@Field("fieldName2") String fieldName2,
@Field("fieldName3") String fieldName3);
我这样称呼:
apiService.updateDeviceSync(deviceId, 0, null, timestamp)
但它仅发送fieldName1
和fieldName3
我的gsonbuilder上已经有serializeNulls()
,所以它应该在其中包含null,但是logcat显示它不包含fieldName2
我需要在Retrofit2中将fieldName2更新为null
答案 0 :(得分:1)
通常,您不想在API请求中发送null。您的服务器将查找该字段,并发现该字段不存在。通过不发送空值,您可以节省带宽,进而节省数据/电池。
答案 1 :(得分:0)
最后使它生效,这是我所做的更改:
将我的api更新为:
@PUT("Devices/{id}")
Call<Device> updateDeviceCurfewSync(
@Path("id") String id,
@Body HashMap<String, Object> data);
然后叫:
HashMap<String, Object> deviceSyncMap = new HashMap<>();
deviceSyncMap.put("fieldName1", 0);
deviceSyncMap.put("fieldName2", null);
deviceSyncMap.put("fieldName3", timestamp);
apiService.updateDeviceCurfewSync(deviceId, deviceSyncMap)