Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据Gson中的应用程序版本使用不同的字段名?_Java_Api_Gson_Versioning - Fatal编程技术网

Java 如何根据Gson中的应用程序版本使用不同的字段名?

Java 如何根据Gson中的应用程序版本使用不同的字段名?,java,api,gson,versioning,Java,Api,Gson,Versioning,我有一个使用Java和Gson运行的RESTAPI,并且有一项任务来标准化字段的名称。不幸的是,它们是用我的母语创建的,现在需要改成英语。我在想,我可以支持旧版本,传递旧的字段名 是否可以将@Since注释与@SerializedName一起使用?或者根据版本动态更改字段名的任何解决方案?据我所知,您不能将@与@SerializedName组合以动态更改字段名。另一种方法是将FieldNamingStrategy与变量ver一起使用,以确定应该使用哪个名称进行序列化 下面的示例显示,如果POJO

我有一个使用Java和Gson运行的RESTAPI,并且有一项任务来标准化字段的名称。不幸的是,它们是用我的母语创建的,现在需要改成英语。我在想,我可以支持旧版本,传递旧的字段名


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

据我所知,您不能将
@与
@SerializedName
组合以动态更改字段名。另一种方法是将
FieldNamingStrategy
与变量
ver
一起使用,以确定应该使用哪个名称进行序列化

下面的示例显示,如果POJO中有一个名为
user
的字段,则可以使用不同的预定义
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();

也许会有帮助?在
@SerializedName
注释中同时指定旧名称和新名称,这很好,但是我如何控制版本中基于哪个名称?也许您想分享您的问题的一个最简单的具体示例?