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

如何使用RestAssured筛选符合条件的JSON格式用户数据

Java实现提取指定头发颜色用户数据方案

以下方案针对API自动化测试场景设计,用新手友好的技术栈实现,代码可以直接运行:

  • 技术选型:用RestAssured发送HTTP请求,用Jackson完成JSON和Java对象的自动转换,不需要手动逐层解析JSON节点,出错概率低。

第一步:引入依赖

如果是Maven项目,在pom.xml中添加以下依赖即可:

<dependencies>
    <!-- 用于发送REST请求的测试组件 -->
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>5.3.2</version>
        <scope>test</scope>
    </dependency>
    <!-- 用于JSON和Java对象转换的组件 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>
</dependencies>

第二步:定义匹配响应结构的POJO类

接口返回的是嵌套JSON结构,不需要把所有返回字段都写到Java类里,Jackson会自动忽略Java类中没有定义的字段,只写你需要用到的属性即可:

  1. 最外层响应类,对应返回结构中的根节点
import java.util.List;

public class UserResponse {
    private List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}
  1. 头发属性类,对应嵌套的hair节点
public class Hair {
    private String color;
    private String type;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}
  1. 用户信息类,对应用户对象节点,可按需增减字段
public class User {
    private Integer id;
    private String firstName;
    private String lastName;
    private Hair hair;

    // 用IDE一键生成getter/setter即可
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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 Hair getHair() {
        return hair;
    }

    public void setHair(Hair hair) {
        this.hair = hair;
    }
}

第三步:编写测试逻辑,请求接口并过滤目标数据

代码逻辑很简单:发送GET请求拿到响应,自动转成Java对象,再过滤出头发颜色为Black的用户即可:

import io.restassured.RestAssured;
import org.junit.jupiter.api.Test;
import java.util.List;
import static io.restassured.RestAssured.given;

public class UserTest {
    @Test
    public void filterBlackHairUsers() {
        // 配置接口基础地址
        RestAssured.baseURI = "https://dummyjson.com";

        // 发送请求并把响应自动映射为定义好的Java对象
        UserResponse response = given()
                .when()
                .get("/users")
                .then()
                .statusCode(200) // 先校验接口返回状态码正常
                .extract()
                .as(UserResponse.class);

        // 过滤出所有头发颜色为Black的用户
        List<User> blackHairUsers = response.getUsers()
                .stream()
                .filter(user -> "Black".equals(user.getHair().getColor()))
                .toList();

        // 后续可以直接对blackHairUsers做断言,比如打印结果验证
        blackHairUsers.forEach(user -> System.out.printf("用户ID:%d,姓名:%s %s,头发颜色:%s%n",
                user.getId(),
                user.getFirstName(),
                user.getLastName(),
                user.getHair().getColor()));
    }
}

注意事项

  • 过滤条件里固定值"Black"写在equals前面,是为了避免个别用户数据缺失hair字段时触发空指针异常。
  • 如果你不想定义POJO,也可以直接用JsonPath按路径提取字段,但自动化测试场景下定义POJO的方式后续做字段断言更方便,也不容易写错JSON路径。
  • 拿到过滤后的用户列表后,可以直接加测试断言,比如校验黑发用户数量、用户属性是否符合预期,满足自动化测试的校验需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:45:31