java - 如何在 Gson 中根据应用版本使用不同的字段名称?
问题描述
我有一个使用 Java 和 Gson 运行的休息 API,并且有一个任务来标准化字段的名称。不幸的是,它们是用我的母语创建的,现在需要将它们更改为英语。我正在考虑一种可以支持旧版本的方式,传递旧的字段名称。
是否可以将@Since 注释与@SerializedName 一起使用?或者根据版本动态更改字段名称的任何解决方案?
解决方案
据我所知,您不能组合@Since
并@SerializedName
动态更改字段名称。另一种方法是使用FieldNamingStrategy
变量ver
来确定应该使用哪个名称进行序列化。
以下示例显示如果user
您的 POJO 中有一个字段命名,那么您可以将其名称更改为不同的预定义ver
(例如 0.1 或 0.2)以进行序列化。
代码片段
double ver = 0.1;
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new FieldNamingStrategy() {
@Override
public String translateName(Field field) {
if ("user".equals(field.getName())) {
if (ver == 0.1) {
return "username";
} else if (ver == 0.2) {
return "user_name";
} else {
return field.getName();
}
} else {
return field.getName();
}
}
})
.create();
推荐阅读
- django - 检查 Django 中是否存在具有 id 和 manytomany 字段的匹配对象
- php - 仅显示特定类别的分组产品
- scala - 从 Scala Circe 中的 Map 列表创建一个 json
- flutter - flutter 无法导入依赖项
- reactjs - 如何使用 VSCode 导航到 Functional React 中的子组件?
- python - 使用 pandas 将数据框中的值替换为字典中的值
- docker - 在 Azure 应用服务中,我应该使用单独的容器运行一个大的 Dockerfile 还是 docker-compose.yml?
- python - Python中的高阶函数
- java - 如何安全地从列表中删除元素
- python - 刷新标准输出时打印子进程索引