我有一个使用 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();
关于java - Gson中如何根据应用版本使用不同的字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59357330/