REST Assured 31 - 创建POJO作为A Nested JSON Payload

本文介绍了如何使用Java创建一个复杂的嵌套JSONPayload,通过定义多个POJO类来映射JSON对象和数组。首先,定义了基本的Employee、Contractors和CompanyPFDeails POJO类,然后创建了一个NestedPOJO类来组合所有字段。通过填充这些POJO类的实例并使用Jackson库将其转换为JSON字符串,最终得到与给定JSON实例相匹配的JSONpayload。

REST Assured 系列汇总 之 REST Assured 31 - 创建POJO作为A Nested JSON Payload

前面我们已经了解了创建POJO作为一个JSON Object payload创建POJO作为一个JSON Array payload,本篇我们了解一下更复杂的嵌套的JSON payload。

JSON payload实例

{
  "companyName": "MSE",
  "companyHOCity": "Benagluru",
  "companyCEO": "Amod",
  "supportedSalaryBanks": [
    "HDFC",
    "ICICI",
    "AXIS"
  ],
  "pincodesOfCityOffice": [
    560037,
    360034,
    456343
  ],
  "employee": [
    {
      "firstName": "Amod",
      "lastName": "Mahajan",
      "gender": "Male",
      "age": 28,
      "salary": 10000.56,
      "married": false
    },
    {
      "firstName": "Animesh",
      "lastName": "Prashant",
      "gender": "Male",
      "age": 30,
      "salary": 20000.56,
      "married": false
    },
    {
      "firstName": "Kitty",
      "lastName": "Gupta",
      "gender": "Female",
      "age": 26,
      "salary": 30000.56,
      "married": false
    }
  ],
  "contractors": [
    {
      "firstName": "Seema",
      "lastName": "Singh",
      "contractFrom": "Jan-2019",
      "contractTo": "JAN-2025"
    },
    {
      "firstName": "Hari",
      "lastName": "Prasad",
      "contractFrom": "Jan-2017",
      "contractTo": "JAN-2030"
    }
  ],
  "companyPFDeails": {
    "pfName": "XYZ",
    "pfCity": "Benagluru",
    "pfYear": 2012,
    "noOfEmployees": 10
  }
}

如果我们能确认我们需要的POJO类是什么,那创建POJO类就非常简单了。最终的POJO类作为一个JSON payload是由很多部分组合在一起的。我们首先要鉴别不同的objects或POJO。

没有必要按1:1的字段映射创建一个POJO,我们可以将不同的对象组合在一个最终的POJO类里就可以了。上面的JSON实例,字段“companyName” , “companyHOCity” 和 “companyCEO”是可以按1:1的映射创建字段的。而字段 “supportedSalaryBanks“ 的值是一个字符串数组,就没有必要在类里将数组里的值一一展现出来,同样“pincodesOfCityOffice” 是一个整型数组,我们就可以按如下定义这些字段:

private String companyName;
private String companyHOCity;
private String companyCEO;
private List<String> supportedSalaryBanks;
private List<Integer> pincodesOfCityOffice;

字段 “employ” 是一个 employees 的数组。Java中没有已经存在的数据类型能表示这个数组中元素的全部信息。所以我们需要创建一个 employee POJO 类,存储 eimployee 的全部详细信息。

{
      "firstName": "Amod",
      "lastName": "Mahajan",
      "gender": "Male",
      "age": 28,
      "salary": 10000.56,
      "married": false
}

表示 employee 数组

List<Employee> employee;

对字段“contractors”也是同样的道理:

List<Contractors> contractors;

字段“companyPFDeails” 包含一个JSON Object,Java中的数据类型也是不能表示的。所以我们需要创建类似 Employee POJO的类。

CompanyPFDeails companyPFDeails;

一旦所有的字段都定义好了,我们就需要一个最终的POJO 类,将所有的字段都包含在一起,就组成了一个完整的payload。

Employee POJO Class

public class Employee {
 
	// private variables or data members of pojo class
	private String firstName;
	private String lastName;
	private String gender;
	private int age;
	private double salary;
	private boolean married;
	
	// Getter and setter methods
	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;
	} 	
}

Contractors POJO Class

public class Contractors {
	private String firstName;
	private String lastName;
	private String contractFrom;
	private String contractTo;
	
	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 getContractFrom() {
		return contractFrom;
	}
	public void setContractFrom(String contractFrom) {
		this.contractFrom = contractFrom;
	}
	public String getContractTo() {
		return contractTo;
	}
	public void setContractTo(String contractTo) {
		this.contractTo = contractTo;
	}
 
}

CompanyPFDeails POJO Class

public class CompanyPFDeails {
	private String pfName;
	private String pfCity;
	private int pfYear;
	private int noOfEmployees;
	
	public String getPfName() {
		return pfName;
	}
	public void setPfName(String pfName) {
		this.pfName = pfName;
	}
	public String getPfCity() {
		return pfCity;
	}
	public void setPfCity(String pfCity) {
		this.pfCity = pfCity;
	}
	public int getPfYear() {
		return pfYear;
	}
	public void setPfYear(int pfYear) {
		this.pfYear = pfYear;
	}
	public int getNoOfEmployees() {
		return noOfEmployees;
	}
	public void setNoOfEmployees(int noOfEmployees) {
		this.noOfEmployees = noOfEmployees;
	}
}

Final POJO class

import java.util.List;
 
public class NestedPOJO {
	
	private String companyName;
	private String companyHOCity;
	private String companyCEO;
	private List<String> supportedSalaryBanks;
	private List<Integer> pincodesOfCityOffice;
	List<Employee> employee;
	List<Contractors> contractors;
	CompanyPFDeails companyPFDeails;
	
	public String getCompanyName() {
		return companyName;
	}
	public void setCompanyName(String companyName) {
		this.companyName = companyName;
	}
	public String getCompanyHOCity() {
		return companyHOCity;
	}
	public void setCompanyHOCity(String companyHOCity) {
		this.companyHOCity = companyHOCity;
	}
	public String getCompanyCEO() {
		return companyCEO;
	}
	public void setCompanyCEO(String companyCEO) {
		this.companyCEO = companyCEO;
	}
	public List<String> getSupportedSalaryBanks() {
		return supportedSalaryBanks;
	}
	public void setSupportedSalaryBanks(List<String> supportedSalaryBanks) {
		this.supportedSalaryBanks = supportedSalaryBanks;
	}
	public List<Integer> getPincodesOfCityOffice() {
		return pincodesOfCityOffice;
	}
	public void setPincodesOfCityOffice(List<Integer> pincodesOfCityOffice) {
		this.pincodesOfCityOffice = pincodesOfCityOffice;
	}
	
	public List<Employee> getEmployee() {
		return employee;
	}
	public void setEmployee(List<Employee> employee) {
		this.employee = employee;
	}
	public List<Contractors> getContractors() {
		return contractors;
	}
	public void setContractors(List<Contractors> contractors) {
		this.contractors = contractors;
	}
	public CompanyPFDeails getCompanyPFDeails() {
		return companyPFDeails;
	}
	public void setCompanyPFDeails(CompanyPFDeails companyPFDeails) {
		this.companyPFDeails = companyPFDeails;
	}
 
}

利用上面的POJO类,我们就可以创建一个JSON payload了

import java.util.ArrayList;
import java.util.List;
 
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
 
public class CreateNestedJSONFromPOJOClasses {
 
	public static void main(String[] args) throws JsonProcessingException {
			
		NestedPOJO nestedPOJO = new NestedPOJO();
		nestedPOJO.setCompanyName("MSE");
		nestedPOJO.setCompanyHOCity("Benagluru");
		nestedPOJO.setCompanyCEO("Amod");
		
		List<String> supportedSalaryBanks = new ArrayList<String>();
		supportedSalaryBanks.add("HDFC");
		supportedSalaryBanks.add("ICICI");
		supportedSalaryBanks.add("AXIS");
		nestedPOJO.setSupportedSalaryBanks(supportedSalaryBanks);
		
		List<Integer> pincodesOfCityOffice = new ArrayList<Integer>();
		pincodesOfCityOffice.add(560037);
		pincodesOfCityOffice.add(360034);
		pincodesOfCityOffice.add(456343);
		nestedPOJO.setPincodesOfCityOffice(pincodesOfCityOffice);
		
		// Create first employee
		Employee amod = new Employee();
		amod.setFirstName("Amod");
		amod.setLastName("Mahajan");
		amod.setAge(28);
		amod.setGender("Male");
		amod.setSalary(10000.56);
		amod.setMarried(false);
 
		// Create second employee
		Employee animesh = new Employee();
		animesh.setFirstName("Animesh");
		animesh.setLastName("Prashant");
		animesh.setAge(30);
		animesh.setGender("Male");
		animesh.setSalary(20000.56);
		animesh.setMarried(true);
 
		// Create third employee
		Employee kitty = new Employee();
		kitty.setFirstName("Kitty");
		kitty.setLastName("Gupta");
		kitty.setAge(26);
		kitty.setGender("Female");
		kitty.setSalary(30000.56);
		kitty.setMarried(false);
 
		// Creating a List of Employees
		List<Employee> allEMployees = new ArrayList<Employee>();
		allEMployees.add(amod);
		allEMployees.add(animesh);
		allEMployees.add(kitty);
		nestedPOJO.setEmployee(allEMployees);
		
		Contractors seema = new Contractors();
		seema.setFirstName("Seema");
		seema.setLastName("Singh");
		seema.setContractFrom("Jan-2019");
		seema.setContractTo("JAN-2025");
		
		Contractors hari = new Contractors();
		hari.setFirstName("Hari");
		hari.setLastName("Prasad");
		hari.setContractFrom("Jan-2017");
		hari.setContractTo("JAN-2030");
		
		List<Contractors> allContractors = new ArrayList<Contractors>();
		allContractors.add(seema);
		allContractors.add(hari);
		nestedPOJO.setContractors(allContractors);
		
		CompanyPFDeails companyPFDeails = new CompanyPFDeails();
		companyPFDeails.setPfName("XYZ");
		companyPFDeails.setPfCity("Benagluru");
		companyPFDeails.setPfYear(2012);
		companyPFDeails.setNoOfEmployees(10);
		nestedPOJO.setCompanyPFDeails(companyPFDeails);
		
		ObjectMapper objectMapper = new ObjectMapper();
		String nestedJsonPayload = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(nestedPOJO);
		System.out.println(nestedJsonPayload);
	}
}

输出:

{
  "companyName" : "MSE",
  "companyHOCity" : "Benagluru",
  "companyCEO" : "Amod",
  "supportedSalaryBanks" : [ "HDFC", "ICICI", "AXIS" ],
  "pincodesOfCityOffice" : [ 560037, 360034, 456343 ],
  "employee" : [ {
    "firstName" : "Amod",
    "lastName" : "Mahajan",
    "gender" : "Male",
    "age" : 28,
    "salary" : 10000.56,
    "married" : false
  }, {
    "firstName" : "Animesh",
    "lastName" : "Prashant",
    "gender" : "Male",
    "age" : 30,
    "salary" : 20000.56,
    "married" : true
  }, {
    "firstName" : "Kitty",
    "lastName" : "Gupta",
    "gender" : "Female",
    "age" : 26,
    "salary" : 30000.56,
    "married" : false
  } ],
  "contractors" : [ {
    "firstName" : "Seema",
    "lastName" : "Singh",
    "contractFrom" : "Jan-2019",
    "contractTo" : "JAN-2025"
  }, {
    "firstName" : "Hari",
    "lastName" : "Prasad",
    "contractFrom" : "Jan-2017",
    "contractTo" : "JAN-2030"
  } ],
  "companyPFDeails" : {
    "pfName" : "XYZ",
    "pfCity" : "Benagluru",
    "pfYear" : 2012,
    "noOfEmployees" : 10
  }
}

注意:将Java 对象转换成字符串,是用到了Jackson Java libray,所有不要忘记了添加Jackon依赖。我之前pom里有添加json schema validator依赖,它有传递依赖 jackon databind依赖。

<!-- json schema validation -->
  <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>json-schema-validator</artifactId>
      <version>4.3.0</version>
  </dependency>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值