【问题标题】:Retrofit 2 @FormUrlEncoded with null fields改造 2 @FormUrlEncoded 与空字段
【发布时间】:2019-01-23 22:22:12
【问题描述】:

我要发送这个:

@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)

但它只发送fieldName1fieldName3

我的 gsonbuilder 上已经有 serializeNulls(),所以它应该在其中包含空值,但 logcat 显示它不包括 fieldName2

我需要在 retrofit2 中将 fieldName2 更新为 null

【问题讨论】:

  • 您是否在改造构建器中添加了 addConverterFactory(GsonConverterFactory.create(new GsonBuilder().serializeNulls().create()))
  • @BrunoCaceiro 是的,我已经有了这个

标签: java android gson retrofit2


【解决方案1】:

终于成功了,以下是我所做的更改:

将我的 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)

【讨论】:

  • 很好的解决方法,我到处查看是否可以在请求正文中传递空参数,传递哈希映射解决了它!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2016-02-18
  • 1970-01-01
相关资源
最近更新 更多