Gson @Since 之 版本支持

随着应用程序随时间变化,模型类也会随之变化。有时这些更改可能会中断,例如添加/删除字段等。

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

1。 Gson @Since注解

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

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

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

@Since(1.2)
private String email;

2。 Gson版本支持

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

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

在下面的员工一 Stream 的,我们已经版本三个字段,即firstNamelastNameemail

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实例

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

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

3.演示

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

3.1。具有版本支持的序列化

让序列号以上的Employee对象序列号<code1.1< code=””></code1.1<>

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));
{
  "id": 1,
  "firstName": "Lokesh",
  "lastName": "Gupta"
}

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

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

让反序列化JSON字符串以Employee具有版本号的对象<code1.1< code=””></code1.1<>

String json = "{'id': 1001, "
				+ "'firstName': 'Lokesh',"
				+ "'lastName': 'Gupta',"
				+ "'email': 'mobtrack_service@163.com'}";

Gson gson = new GsonBuilder()
		.setVersion(1.1)
		.setPrettyPrinting()
		.create();

Employee employeeObj = gson.fromJson(json, Employee.class);

System.out.println(employeeObj);
Employee [id=1001, firstName=Lokesh, lastName=Gupta, email=null]

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

使用@Since注解将有关Gson版本支持的问题交给我。

saigon has written 1445 articles

Leave a Reply