# 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 版本支持的问题**。

学习愉快！