🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Gson `@Since` – 版本支持 > 原文: [https://howtodoinjava.com/gson/gson-since-version-support/](https://howtodoinjava.com/gson/gson-since-version-support/) 随着应用随时间变化,模型类也会随之变化。 有时这些变化可能会打破例如,添加/删除字段等 所有此类更改都可以使用`@Since`注解进行标记,以跟踪模型类,以便在这些系统使用反序列化 JSON 数据进行交谈时,与其他系统的应用集成不会中断。 ## 1\. Gson `@Since`注解 在 [Gson](https://howtodoinjava.com/learningpaths/gson/) 中,可以通过使用`@Since`注解来维护同一对象的多个版本。 可以在类,字段以及将来的方法中使用此注解。 它采用单个参数 – `ignoreVersionsAfter`。 当我们用版本号`'M.N'`配置`Gson`实例时,所有标记有**版本大于`M.N`的类字段将被忽略**。 例如,如果我们将 Gson 配置为版本号`'1.2'`,则所有版本号更大的字段(例如 1.3、1.4…)都将被忽略。 ```java @Since(1.2) private String email; ``` ## 2\. Gson 版本支持 让我们创建并运行一个示例,以详细了解 Gson 中的版本控制支持。 #### 2.1 如何使用`@Since`注解编写版本化的类 在`Employee`类下面,我们对三个字段进行了版本控制,即`firstName`,`lastName`和`email`。 ```java public class Employee { private Integer id; @Since(1.0) private String firstName; @Since(1.1) private String lastName; @Since(1.2) private String email; } ``` #### 2.2 创建具有版本支持的 Gson 实例 要创建将使用`@Since`注解的`Gson`实例,请使用`GsonBuilder.setVersion()`方法。 ```java Gson gson = new GsonBuilder() .setVersion(1.1) .create(); ``` ## 3.演示 `@Since`注解*会影响*的序列化和反序列化,因此请务必谨慎使用。 #### 3.1 具有版本支持的序列化 将版本号为`1.1`的上方`Employee`对象序列化。 ```java Employee employeeObj = new Employee(1, "Lokesh", "Gupta", "howtogoinjava@gmail.com"); Gson gson = new GsonBuilder() .setVersion(1.1) .setPrettyPrinting() .create(); System.out.println(gson.toJson(employeeObj)); ``` ```java { "id": 1, "firstName": "Lokesh", "lastName": "Gupta" } ``` 观察输出。 版本号大于`1.1`,即`1.2`的字段将被忽略。 其他领域也都很好。 #### 3.2 具有版本支持的反序列化 让我们将 JSON 字符串反序列化为版本号为`1.1`的`Employee`对象。 ```java String json = "{'id': 1001, " + "'firstName': 'Lokesh'," + "'lastName': 'Gupta'," + "'email': 'howtodoinjava@gmail.com'}"; Gson gson = new GsonBuilder() .setVersion(1.1) .setPrettyPrinting() .create(); Employee employeeObj = gson.fromJson(json, Employee.class); System.out.println(employeeObj); ``` ```java Employee [id=1001, firstName=Lokesh, lastName=Gupta, email=null] ``` 观察输出。 即使 JSON 字符串具有`email`字段,也没有反序列化。 请来回答有关**使用[`@Since`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/Since.html)注解的 Gson 版本支持的问题**。 学习愉快!