java - Gson中如何根据应用版本使用不同的字段名称?

标签 java api gson versioning

我有一个使用 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/

相关文章:

javascript - 如何从 Node 数据发送到React localStorage?

java - GSON 将瞬变反序列化为 null

android - 使用 Retrofit 如何在没有对象解析的情况下解析 JSONArray?

java 声音 api AudioSystem.getMixerInfo() 问题

java - Gson 2.2.2 Json 为 JsonElement 自定义 JsonWriter 以避免转义字符串?

java - 寻找更高效的堆排序?

java - Spring:未在表中设置列值

java - HTTPClient-java.net.SocketException : Unconnected sockets not implemented thrown

java - 字符串排序

php - 在 Code Igniter Rest 服务器上加载语言时出错