You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Rest-assured Java API解析并验证JSON响应?

Rest-Assured 解析验证JSON响应实操指南

我来给你详细讲讲怎么用Rest-Assured解析并验证你拿到的这个JSON响应,结合你提到的代码示例,分两种常用方法来演示:

先把目标JSON响应贴出来,方便对照:

[ 
  { "Emp": "00000", "Emp_ID": 901, "First_Name": "agar", "Last_Name": "vedi", "Country": "India", "EmpLocation": "Noida" }, 
  { "Emp": "001", "Emp_ID": 383, "First_Name": "Manoj", "Last_Name": "jee", "Country": "India", "EmpLocation": "Noida" } 
]

1. 先搞定依赖(Maven为例)

确保你的项目里已经引入Rest-Assured的核心依赖,这样才能正常调用它的API:

<!-- Rest-Assured核心依赖 -->
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>5.3.0</version>
    <scope>test</scope>
</dependency>
<!-- 如果用JUnit 5做断言,需要额外引入 -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>

2. 方法一:用JsonPath直接解析验证

这是最灵活的方式,不用额外创建类,适合快速验证单字段或批量数据,完全适配你提到的httpRequest.request()代码逻辑:

import io.restassured.RestAssured;
import io.restassured.http.Method;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import io.restassured.path.json.JsonPath;
import static org.junit.jupiter.api.Assertions.*;

public class EmployeeValidationTest {
    public static void main(String[] args) {
        // 1. 设置API基础地址
        RestAssured.baseURI = "你的API基础URL";
        
        // 2. 创建请求实例
        RequestSpecification httpRequest = RestAssured.given();
        
        // 3. 发送GET请求(和你提到的代码示例逻辑一致)
        Response response = httpRequest.request(Method.GET, "你的接口路径,比如/employees");
        
        // 4. 将响应转为JsonPath对象,方便解析
        JsonPath jsonPath = response.jsonPath();
        
        // ---------- 开始各种验证操作 ----------
        
        // 验证员工总数是2
        int employeeCount = jsonPath.getList("$").size();
        assertEquals(2, employeeCount, "员工数量不符合预期");
        
        // 验证第一个员工的名字是"agar"
        String firstEmpFirstName = jsonPath.getString("[0].First_Name");
        assertEquals("agar", firstEmpFirstName, "第一个员工的名字不正确");
        
        // 验证第二个员工的ID是383
        int secondEmpId = jsonPath.getInt("[1].Emp_ID");
        assertEquals(383, secondEmpId, "第二个员工的ID不正确");
        
        // 批量验证所有员工的国家都是India
        java.util.List<String> allCountries = jsonPath.getList("Country");
        for (String country : allCountries) {
            assertEquals("India", country, "存在员工的国家不是India");
        }
    }
}

这里的$代表整个JSON根节点,[0]表示数组的第一个元素,用.就能直接访问对象内的字段,逻辑非常直观。

3. 方法二:映射到POJO类进行验证

如果你的接口响应结构固定,这种方法更优雅,面向对象的方式更适合复杂结构的长期维护:

第一步:创建Employee POJO类

public class Employee {
    private String Emp;
    private int Emp_ID;
    private String First_Name;
    private String Last_Name;
    private String Country;
    private String EmpLocation;

    // 必须保留无参构造函数(Rest-Assured反射需要)
    public Employee() {}

    // 全参构造函数(可选,方便测试时实例化)
    public Employee(String emp, int emp_ID, String first_Name, String last_Name, String country, String empLocation) {
        Emp = emp;
        Emp_ID = emp_ID;
        First_Name = first_Name;
        Last_Name = last_Name;
        Country = country;
        EmpLocation = empLocation;
    }

    // 所有字段的Getter和Setter方法(必须要有,Rest-Assured需要访问字段)
    public String getEmp() { return Emp; }
    public void setEmp(String emp) { Emp = emp; }
    public int getEmp_ID() { return Emp_ID; }
    public void setEmp_ID(int emp_ID) { Emp_ID = emp_ID; }
    public String getFirst_Name() { return First_Name; }
    public void setFirst_Name(String first_Name) { First_Name = first_Name; }
    public String getLast_Name() { return Last_Name; }
    public void setLast_Name(String last_Name) { Last_Name = last_Name; }
    public String getCountry() { return Country; }
    public void setCountry(String country) { Country = country; }
    public String getEmpLocation() { return EmpLocation; }
    public void setEmpLocation(String empLocation) { EmpLocation = empLocation; }
}

第二步:将响应转为POJO列表并验证

import io.restassured.RestAssured;
import io.restassured.http.Method;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;

public class EmployeePojoValidationTest {
    public static void main(String[] args) {
        // 1. 设置API基础地址
        RestAssured.baseURI = "你的API基础URL";
        
        // 2. 创建请求实例
        RequestSpecification httpRequest = RestAssured.given();
        
        // 3. 发送GET请求
        Response response = httpRequest.request(Method.GET, "你的接口路径");
        
        // 4. 直接将响应转为List<Employee>
        List<Employee> employeeList = response.jsonPath().getList("", Employee.class);
        
        // ---------- 开始验证 ----------
        
        // 验证列表长度
        assertEquals(2, employeeList.size());
        
        // 验证第一个员工的完整信息
        Employee firstEmp = employeeList.get(0);
        assertEquals("00000", firstEmp.getEmp());
        assertEquals(901, firstEmp.getEmp_ID());
        assertEquals("agar", firstEmp.getFirst_Name());
        assertEquals("vedi", firstEmp.getLast_Name());
        assertEquals("India", firstEmp.getCountry());
        assertEquals("Noida", firstEmp.getEmpLocation());
        
        // 验证第二个员工的完整信息
        Employee secondEmp = employeeList.get(1);
        assertEquals("001", secondEmp.getEmp());
        assertEquals(383, secondEmp.getEmp_ID());
        assertEquals("Manoj", secondEmp.getFirst_Name());
        assertEquals("jee", secondEmp.getLast_Name());
        assertEquals("India", secondEmp.getCountry());
        assertEquals("Noida", secondEmp.getEmpLocation());
    }
}

这种方法的优势是代码更整洁,后续如果接口字段有变更,只需要修改POJO类即可,维护成本更低。

内容的提问来源于stack exchange,提问作者aditya rawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:18:49