首页 > 解决方案 > 改造 - 在序列化期间动态添加字段

问题描述

我目前在我的 Android 项目中使用 Retrofit 2.3,最近我们使用的 API 已更新,因此它需要"version":number在所有 POST 请求中包含在 JSON 正文中。因此,假设我们需要传递 UserCredentials 对象 - 以前的请求主体只是使用 GSON 转换器序列化,看起来像这样

{"username":"myUsername", "password":"myPassword"}

现在它必须有额外的“版本”字段:

{"username":"myUsername", "password":"myPassword", "version":1}

我已经用谷歌搜索了几个小时如何设置自定义转换器工厂进行改造,但我发现的只是如何从序列化中排除某些字段。我知道我可以简单地"version"向所有 POJO 添加字段,但我发现这种方法“肮脏”,因为它只会在将数据发送到服务器期间使用。

以前有没有人做过这样的事情?

标签: androidgsonretrofit

解决方案


我做到了,但不完全是您想要的方式,您可以创建 BaseRequest POJO 类,您可以在其中使用版本号并将该类扩展到您正在使用的其他 POJO 类,如下所示:

class BaseRequest{
@SerializedName("version")
public int version= 0;
 }

将此基础 POJO 类扩展为其他 POJO 类以使用如下版本号:

class UserRequest extends BaseRequest{
  @SerializedName("username")
  public String userName = "";
  @SerializedName("password")
  public String password = "";
}

这种方法有很多好处,例如,如果您的 API 中需要多一个字段,则无需更改所有 API。您可以通过在基本请求中添加一个字段来实现这一点。


推荐阅读