原文: https://howtodoinjava.com/gson/gson-since-version-support/

随着应用随时间变化,模型类也会随之变化。 有时这些变化可能会打破例如,添加/删除字段等

所有此类更改都可以使用@Since注解进行标记,以跟踪模型类,以便在这些系统使用反序列化 JSON 数据进行交谈时,与其他系统的应用集成不会中断。

1. Gson @Since注解

Gson 中,可以通过使用@Since注解来维护同一对象的多个版本。 可以在类,字段以及将来的方法中使用此注解。 它采用单个参数 – ignoreVersionsAfter

当我们用版本号'M.N'配置Gson实例时,所有标记有版本大于M.N的类字段将被忽略

例如,如果我们将 Gson 配置为版本号'1.2',则所有版本号更大的字段(例如 1.3、1.4…)都将被忽略。

  1. @Since(1.2)
  2. private String email;

2. Gson 版本支持

让我们创建并运行一个示例,以详细了解 Gson 中的版本控制支持。

2.1 如何使用@Since注解编写版本化的类

Employee类下面,我们对三个字段进行了版本控制,即firstNamelastNameemail

  1. public class Employee
  2. {
  3. private Integer id;
  4. @Since(1.0)
  5. private String firstName;
  6. @Since(1.1)
  7. private String lastName;
  8. @Since(1.2)
  9. private String email;
  10. }

2.2 创建具有版本支持的 Gson 实例

要创建将使用@Since注解的Gson实例,请使用GsonBuilder.setVersion()方法。

  1. Gson gson = new GsonBuilder()
  2. .setVersion(1.1)
  3. .create();

3.演示

@Since注解会影响的序列化和反序列化,因此请务必谨慎使用。

3.1 具有版本支持的序列化

将版本号为1.1的上方Employee对象序列化。

  1. Employee employeeObj = new Employee(1, "Lokesh", "Gupta", "howtogoinjava@gmail.com");
  2. Gson gson = new GsonBuilder()
  3. .setVersion(1.1)
  4. .setPrettyPrinting()
  5. .create();
  6. System.out.println(gson.toJson(employeeObj));
  1. {
  2. "id": 1,
  3. "firstName": "Lokesh",
  4. "lastName": "Gupta"
  5. }

观察输出。 版本号大于1.1,即1.2的字段将被忽略。 其他领域也都很好。

3.2 具有版本支持的反序列化

让我们将 JSON 字符串反序列化为版本号为1.1Employee对象。

  1. String json = "{'id': 1001, "
  2. + "'firstName': 'Lokesh',"
  3. + "'lastName': 'Gupta',"
  4. + "'email': 'howtodoinjava@gmail.com'}";
  5. Gson gson = new GsonBuilder()
  6. .setVersion(1.1)
  7. .setPrettyPrinting()
  8. .create();
  9. Employee employeeObj = gson.fromJson(json, Employee.class);
  10. System.out.println(employeeObj);
  1. Employee [id=1001, firstName=Lokesh, lastName=Gupta, email=null]

观察输出。 即使 JSON 字符串具有email字段,也没有反序列化。

请来回答有关使用@Since注解的 Gson 版本支持的问题

学习愉快!