android - 改造 - 在序列化期间动态添加字段
问题描述
我目前在我的 Android 项目中使用 Retrofit 2.3,最近我们使用的 API 已更新,因此它需要"version":number
在所有 POST 请求中包含在 JSON 正文中。因此,假设我们需要传递 UserCredentials 对象 - 以前的请求主体只是使用 GSON 转换器序列化,看起来像这样
{"username":"myUsername", "password":"myPassword"}
现在它必须有额外的“版本”字段:
{"username":"myUsername", "password":"myPassword", "version":1}
我已经用谷歌搜索了几个小时如何设置自定义转换器工厂进行改造,但我发现的只是如何从序列化中排除某些字段。我知道我可以简单地"version"
向所有 POJO 添加字段,但我发现这种方法“肮脏”,因为它只会在将数据发送到服务器期间使用。
以前有没有人做过这样的事情?
解决方案
我做到了,但不完全是您想要的方式,您可以创建 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。您可以通过在基本请求中添加一个字段来实现这一点。
推荐阅读
- nginx - 413 请求实体在 5.4MB JSON 上太大:如何增加设置?
- matlab - 在需要矩阵行的函数上应用 arrayfun
- c# - 使用链接服务器 sql 的替代方法
- android - 类没有定义无参数构造函数。如果您使用 ProGuard,请确保这些构造函数没有被剥离
- android - 在 Constraintlayout 中动画 Google 地图使应用程序冻结
- c++ - 如何懒惰地生成完成的项目序列并对其进行迭代
- dialogflow-es - 如何修复不一致的 Dialogflow 帐户?
- android - 尝试调用虚拟方法 'void android.view.View.setOnTouchListener
- angularjs - AngularJS - 检查组件的绑定函数是否是一个函数
- c# - 在 C# 中使用 And and Or 子句创建 Mongodb 查询