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

如何使用Rest Assured向REST API请求的数组添加多个对象

问题:如何构造包含多个对象的JSON请求体数组?

需要构造如下格式的JSON请求体:

{
    "data": [
        {
            "name": "saumy",
            "code": "say1y"
        },
        {
            "name": "saumy",
            "code": "say1y"
        }
    ],
    "dispositionList": "11379"
}

目前已成功添加单个对象:

{
    "name": "saumy",
    "code": "say1y"
}

但不清楚如何添加数组中的下一个对象。在Step Definition中,已通过以下代码添加第一个对象:

@Then("Uses the token and create Bulk disposition status payload with {string} {string}")
public void uses_the_token_generated_and_created_bulk_disposition_status_payload_with(String name, String code)
        throws IOException {
    randomName = name + randomNumber;
    datajson = new Data("CODE", "CODE123");
    res = given().spec(requestSpecification()).body(data.addDispositionStatus(randomName, code, listId, datajson))
            .relaxedHTTPSValidation();
}

请问需要添加什么代码来实现添加数组中的下一个对象?

解决方案

核心思路是让请求体中的data字段对应一个集合(List或数组),而非单个对象,先把多个对象存入集合,再组装成完整请求体。以下是几种可行的修改方式:

方式1:复用现有方法追加对象

如果你的data对象内部已维护data数组的列表,直接调用两次添加方法即可:

@Then("Uses the token and create Bulk disposition status payload with {string} {string}")
public void uses_the_token_generated_and_created_bulk_disposition_status_payload_with(String name, String code)
        throws IOException {
    // 添加第一个对象
    String randomName1 = name + randomNumber;
    Data datajson1 = new Data("CODE", "CODE123");
    data.addDispositionStatus(randomName1, code, listId, datajson1);

    // 添加第二个对象(可使用不同参数)
    String randomName2 = name + (randomNumber + 1);
    Data datajson2 = new Data("CODE", "CODE123");
    data.addDispositionStatus(randomName2, code, listId, datajson2);

    // 发送请求,此时data内部的data数组已包含两个对象
    res = given().spec(requestSpecification())
            .body(data)
            .relaxedHTTPSValidation();
}

方式2:手动创建集合组装请求体

如果现有方法不支持追加,手动创建列表存储多个对象,再封装成请求体:

// 先定义对应请求体的实体类
// BulkDispositionPayload.java
public class BulkDispositionPayload {
    private List<DispositionStatus> data;
    private String dispositionList;

    // 生成getter、setter方法
    public List<DispositionStatus> getData() { return data; }
    public void setData(List<DispositionStatus> data) { this.data = data; }
    public String getDispositionList() { return dispositionList; }
    public void setDispositionList(String dispositionList) { this.dispositionList = dispositionList; }
}

// DispositionStatus.java(对应单个对象的实体)
public class DispositionStatus {
    private String name;
    private String code;
    private String listId;
    private Data datajson;

    // 构造方法
    public DispositionStatus(String name, String code, String listId, Data datajson) {
        this.name = name;
        this.code = code;
        this.listId = listId;
        this.datajson = datajson;
    }

    // 生成getter、setter方法
}

// Step Definition中的代码
@Then("Uses the token and create Bulk disposition status payload with {string} {string}")
public void uses_the_token_generated_and_created_bulk_disposition_status_payload_with(String name, String code)
        throws IOException {
    // 创建两个对象
    String randomName1 = name + randomNumber;
    Data datajson1 = new Data("CODE", "CODE123");
    DispositionStatus status1 = new DispositionStatus(randomName1, code, listId, datajson1);

    String randomName2 = name + (randomNumber + 1);
    Data datajson2 = new Data("CODE", "CODE123");
    DispositionStatus status2 = new DispositionStatus(randomName2, code, listId, datajson2);

    // 存入列表
    List<DispositionStatus> dataList = new ArrayList<>();
    dataList.add(status1);
    dataList.add(status2);

    // 组装完整请求体
    BulkDispositionPayload payload = new BulkDispositionPayload();
    payload.setData(dataList);
    payload.setDispositionList(listId);

    // 发送请求
    res = given().spec(requestSpecification())
            .body(payload)
            .relaxedHTTPSValidation();
}

方式3:修改现有方法逻辑

如果addDispositionStatus是你自己实现的方法,直接修改它,让它将新对象追加到内部的data列表中,返回包含完整数组的请求体:

// 假设data类的addDispositionStatus方法修改后
public class DataContainer {
    private List<DispositionStatus> data = new ArrayList<>();
    private String dispositionList;

    public DataContainer addDispositionStatus(String name, String code, String listId, Data datajson) {
        DispositionStatus status = new DispositionStatus(name, code, listId, datajson);
        this.data.add(status);
        this.dispositionList = listId;
        return this; // 返回自身,支持链式调用
    }
}

// Step Definition中调用
@Then("Uses the token and create Bulk disposition status payload with {string} {string}")
public void uses_the_token_generated_and_created_bulk_disposition_status_payload_with(String name, String code)
        throws IOException {
    randomName = name + randomNumber;
    datajson = new Data("CODE", "CODE123");

    // 链式调用添加两个对象
    DataContainer payload = data.addDispositionStatus(randomName, code, listId, datajson)
                               .addDispositionStatus(name + (randomNumber +1), code, listId, datajson);

    res = given().spec(requestSpecification())
            .body(payload)
            .relaxedHTTPSValidation();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:15:35