REST Assured 32 - 利用Jackson API将Java Object Serialization序列化成 JSON Object

REST Assured 系列汇总 之 REST Assured 32 - 利用Jackson 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(序列化)。我们可以利用任何 JSON 解析 APIs, 本篇我们将用 比较有名的Jackson APIs,后续也会介绍 GSON 库。

关于Jackson API
Jackson API是java的高性能JSON处理器。我们利用Jackson API 可以执行serialization系列化,deserialization 反序列化,读/写一个JSON文件。

Maven 依赖:
一般尽量用最新版本的依赖来自Central Maven Repository

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0-rc2</version>
</dependency>

注意:当我们添加jackosn-databind依赖时,传递依赖包jackson-annotations 和jackson-core也会自动下载。

当然添加json-schema-validator依赖时,jackosn-databind,jackson-annotations 和jackson-core也会自动下载,因为json-schema-validator传递依赖jackosn-databind包。

<!-- json schema validation -->
   <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>json-schema-validator</artifactId>
      <version>4.3.0</version>
   </dependency>

ObjectMapper Class
Jackson API提供的最强大的,使用最多的类就是 ObjectMapper 类。ObjectMapper 类可以用来创建 JSON object,JSON Array,将一个Java object 转换成一个 JSON Object,反之亦然。本篇我们将用ObjectMapper类将一个Java Object转换为一个JSON object。

目标JSON Object:

{
  "firstName" : "Kevin",
  "lastName" : "Zhang",
  "gender" : "M",
  "age" : 19,
  "salary" : 20987.77,
  "married" : false
}

POJO 类
让我们创建一个类,字段名和上面的JSON payload里的节点名保持一样(大小写敏感),因为在解析 Java Object 成 JSON object时,会查看字段的 getter setter 方法, 在这里访问属性没有多大关系。

import java.io.File;
import java.io.IOException;
 
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
 
class MSE_EmployeePojo {
 
	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
ObjectMapper类提供很多方法将不同的object转换成不同的类型。
在这里插入图片描述
可以将Java object 转换成一个String 或 byte array 或 一个文件等。API 我们最常用的写成字符串或文件。在写之前,用“writerWithDefaultPrettyPrinter()” 做相应的格式化,这样输出时就会按正确的格式显示。

public class UsageOfMSE_EmployeePojo {
	
	public static void main(String[] args) throws JsonProcessingException {
		
		MSE_EmployeePojo mse_EmployeePojo = new MSE_EmployeePojo();
		mse_EmployeePojo.setFirstName("Kevin");
		mse_EmployeePojo.setLastName("Zhang");
		mse_EmployeePojo.setAge(19);
		mse_EmployeePojo.setSalary(20987.77);
		mse_EmployeePojo.setMarried(false);
		mse_EmployeePojo.setGender("M");
		
		ObjectMapper objectMapper = new ObjectMapper();
		String convertedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(mse_EmployeePojo);
		System.out.println(convertedJson);
	}
 
}

输出:

{
  "firstName" : "Kevin",
  "lastName" : "Zhang",
  "gender" : "M",
  "age" : 19,
  "salary" : 20987.77,
  "married" : false
}

POJO to a JSON File
用重写的 writeValue(File file, Object obj) 方法,只需传入目标JSON 文件的路径。

public class UsageOfMSE_EmployeePojo {
	
	public static void main(String[] args) throws IOException {
		
		MSE_EmployeePojo mse_EmployeePojo = new MSE_EmployeePojo();
		mse_EmployeePojo.setFirstName("Kevin");
		mse_EmployeePojo.setLastName("Zhang");
		mse_EmployeePojo.setAge(19);
		mse_EmployeePojo.setSalary(20987.77);
		mse_EmployeePojo.setMarried(false);
		mse_EmployeePojo.setGender("M");
		
		ObjectMapper objectMapper = new ObjectMapper();
		String userDir = System.getProperty("user.dir");
		File outputJsonFile = new File(userDir+ "\\src\\test\\resources\\EmployeePayload.json");
		objectMapper.writerWithDefaultPrettyPrinter().writeValue(outputJsonFile, mse_EmployeePojo);
	}
 
}

可以看到JSON文件生成了。
在这里插入图片描述

完整代码:

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.databind.ObjectMapper;

class MSE_EmployeePojo {

    private String firstName;
    private String lastName;
    private String gender;

    private int age;
    private double salary;
    private boolean isMarried;

    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 isMarried() {
        return isMarried;
    }

    public void setMarried(boolean isMarried) {
        this.isMarried = isMarried;
    }
}

public class UsageOfMSE_EmployeePojo {
    public static void main(String[] args) throws IOException {

        MSE_EmployeePojo mse_EmployeePojo = new MSE_EmployeePojo();
        mse_EmployeePojo.setFirstName("Kevin");
        mse_EmployeePojo.setLastName("Zhang");
        mse_EmployeePojo.setAge(19);
        mse_EmployeePojo.setSalary(20987.77);
        mse_EmployeePojo.setMarried(false);
        mse_EmployeePojo.setGender("M");

        ObjectMapper objectMapper = new ObjectMapper();
        String convertedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(mse_EmployeePojo);
        System.out.println(convertedJson);

        String userDir = System.getProperty("user.dir");
        System.out.println("user dir: " + userDir);
        File outputJsonFile = new File(userDir+ "\\src\\test\\resources\\EmployeePayload.json");
        objectMapper.writerWithDefaultPrettyPrinter().writeValue(outputJsonFile, mse_EmployeePojo);
    }
}

输出:

{
  "firstName" : "Kevin",
  "lastName" : "Zhang",
  "gender" : "M",
  "age" : 19,
  "salary" : 20987.77,
  "married" : false
}
user dir: C:\ForKelly\Automation\RestAssuredDemo

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值