我有一个使用Java和Gson运行的rest API,并且有一个标准化字段名称的任务。不幸的是,它们是用我的母语创建的,现在需要将其更改为英语。我在想一种可以支持旧版本,传递旧字段名称的方式。
是否可以将@Since批注与@SerializedName一起使用?还是任何根据版本动态更改字段名称的解决方案?
据我所知,您不能组合@Since
和@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();