REST Assured 系列汇总 之 REST Assured 34 - 利用Gson API将Java Object Serialization系列化成 JSON Object
前面我们有了解POJOs,当你看到本篇文章时,建议你先阅读一下下列相关文章。
什么是Plain Old Java Object (POJO) ?
创建 POJO 作为一个JSON Object Payload
创建 POJO 作为一个JSON Array Payload
创建 POJO 作为A Nested JSON Payload
现在我们将运用 POJOs创建 JSON Objects。将 Java Objects (POJOs) 创建成一个 JSON object (JSON),被称为 Serialization(序列化)。在前面文章已经了解了用Jackson API序列化. 本文将介绍用Gson Java 库序列化一个Jason Object成一个JSON Object。
关于GSON
根据Gson官方文档,Gson是一个Java库,用于将Java Objects转换成JSON,也可以将一个JSON字符串转换成一个等值Java Object。Gson也可以服务于任意的Java Objects,包括没有source code的预先存在的对象。
- 提供简单的 toJson() 和 fromJson() 方法用于 Java Objects 和 JSON的转换。
- 允许预先存在的不可更改的对象跟JSON的互相转换
- 广泛支持Java 泛型
- 允许自定义对象表述representations
- 支持任意复杂的对象(深继承结构和泛型)
添加Gson最新依赖包:
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
Gson 库提供一个 Gson 类,这个类是 Gson 的主类。在调用toJson(Object) 或 fromJson(String, Class) 方法前,先要创建一个 Gson 类的实例。Gson实例是线程安全的,可用于多线程。
可以调用 Gson() 创建一个 Gson实例,如果默认的配置可以满足你的需求。也可以用 GsonBuilder 来创建 不同配置的Gson实例,例如:版本配置,pretty-printing, 自定义的JsonSerializer 和 JsonDeserializer。
目标 JSON Object
{
"firstName" : "Amod",
"lastName" : "Mahajan",
"gender" : "M",
"age" : 29,
"salary" : 10987.77,
"married" : false
}
POJO 类
让我们创建一个类,字段名和上面的JSON payload里的节点名保持一样(大小写敏感),因为在解析 Java Object 成 JSON object时,会查看字段的 getter setter 方法, 在这里访问属性没有多大关系。
public class Employee {
private String firstName;
private String lastName;
private String gender;
private int age;
private double salary;
private boolean married;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public boolean getMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
}
POJO to JSON String
Gson 类提供多相重写的 toJson() 方法:
我们将一个Java Object 转换成一个 JSON字符串写入一个 .json 文件。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonIOException;
public class SerializeJavaToJsonObjectUsingGSON {
public static void main(String[] args) throws JsonIOException, IOException {
// Create a Employee java object
Employee employeeObject = new Employee();
employeeObject.setFirstName("Amod");
employeeObject.setLastName("Mahajan");
employeeObject.setAge(29);
employeeObject.setSalary(10987.77);
employeeObject.setMarried(false);
employeeObject.setGender("M");
// Create a Gson object
Gson gson = new Gson();
// toJson(Object src) method converts Java object to JSON object
String employeeJsonSring = gson.toJson(employeeObject);
// Printing json string. It will be pretty print
System.out.println("Non-pretty JSON String :- ");
System.out.println(employeeJsonSring);
// We can create a configurable Gson instance using GsonBuilder class
Gson gsonBuilder = new GsonBuilder().setPrettyPrinting().create();
String employeeJsonSringUsingJsonBuilder = gsonBuilder.toJson(employeeObject);
System.out.println("Pretty JSON String :- ");
System.out.println(employeeJsonSringUsingJsonBuilder);
// To write Json object in to a file, we need to pass a FileWriter object which is in direct implementation of
// Appendable interface. Make sure you call flush() method otherwise json file will be empty.
String userDir = System.getProperty("user.dir");
File outputJsonFile = new File(userDir+ "\\src\\test\\resources\\EmployeePayloadUsingGson.json");
FileWriter fileWriter = new FileWriter(outputJsonFile);
gsonBuilder.toJson(employeeObject,fileWriter);
fileWriter.flush();
}
}
输出:
Non-pretty JSON String :-
{"firstName":"Amod","lastName":"Mahajan","gender":"M","age":29,"salary":10987.77,"married":false}
Pretty JSON String :-
{
"firstName": "Amod",
"lastName": "Mahajan",
"gender": "M",
"age": 29,
"salary": 10987.77,
"married": false
}
生成的JSON文件: