首页 > 解决方案 > 如何在 Gson 中根据应用版本使用不同的字段名称?

问题描述

我有一个使用 Java 和 Gson 运行的休息 API,并且有一个任务来标准化字段的名称。不幸的是,它们是用我的母语创建的,现在需要将它们更改为英语。我正在考虑一种可以支持旧版本的方式,传递旧的字段名称。

是否可以将@Since 注释与@SerializedName 一起使用?或者根据版本动态更改字段名称的任何解决方案?

标签: javaapigsonversioning

解决方案


据我所知,您不能组合@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();

推荐阅读