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

被折叠的 条评论
为什么被折叠?



