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

如何在Rest Assured中发送POST请求中的数组?

解决方案:Rest Assured 发送嵌套数组的 POST 请求

针对你遇到的Postman中可正常发送数组,但Rest Assured无法实现的问题,以下是几种可行的解决方式:

方法1:使用 List 嵌套构建请求体(推荐)

直接用List包装数组元素,嵌套到Map结构中,Rest Assured会自动将List序列化为JSON数组:

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestRequest {
    public static void main(String[] args) {
        // 构建 steps/data 对应的数组内容
        List<Map<String, Object>> stepsDataList = new ArrayList<>();
        stepsDataList.add(Map.of("param1", "value1", "param2", 100));
        stepsDataList.add(Map.of("param1", "value2", "param2", 200));

        // 逐层构建嵌套请求体
        Map<String, Object> stepsMap = new HashMap<>();
        stepsMap.put("data", stepsDataList);

        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("steps", stepsMap);

        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("data", dataMap);

        // 发送请求
        RestAssured.given()
                .contentType(ContentType.JSON) // 必须指定JSON类型
                .body(requestBody)
                .when()
                .post("your-target-api-url")
                .then()
                .statusCode(200);
    }
}

方法2:直接传入JSON字符串(适合复杂结构)

如果请求体结构复杂,直接编写JSON字符串可以避免序列化问题:

import io.restassured.RestAssured;
import io.restassured.http.ContentType;

public class TestRequest {
    public static void main(String[] args) {
        String requestBody = """
                {
                    "data": {
                        "steps": {
                            "data": [
                                {"param1": "value1", "param2": 100},
                                {"param1": "value2", "param2": 200}
                            ]
                        }
                    }
                }
                """;

        RestAssured.given()
                .contentType(ContentType.JSON)
                .body(requestBody)
                .when()
                .post("your-target-api-url")
                .then()
                .statusCode(200);
    }
}

方法3:使用POJO类映射请求体(规范场景)

通过定义对应结构的POJO类,让Rest Assured自动序列化,适合长期维护的接口测试:

定义POJO类

class RequestPayload {
    private Data data;
    // Getters and Setters
}

class Data {
    private Steps steps;
    // Getters and Setters
}

class Steps {
    private List<StepItem> data;
    // Getters and Setters
}

class StepItem {
    private String param1;
    private Integer param2;
    // Getters and Setters
}

发送请求

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.Arrays;

public class TestRequest {
    public static void main(String[] args) {
        StepItem item1 = new StepItem();
        item1.setParam1("value1");
        item1.setParam2(100);

        StepItem item2 = new StepItem();
        item2.setParam1("value2");
        item2.setParam2(200);

        Steps steps = new Steps();
        steps.setData(Arrays.asList(item1, item2));

        Data data = new Data();
        data.setSteps(steps);

        RequestPayload payload = new RequestPayload();
        payload.setData(data);

        RestAssured.given()
                .contentType(ContentType.JSON)
                .body(payload)
                .when()
                .post("your-target-api-url")
                .then()
                .statusCode(200);
    }
}

关键注意事项

  • 必须显式设置contentType(ContentType.JSON):Rest Assured默认可能不会正确识别请求体类型,导致数组序列化失败。
  • 避免直接使用数组对象:Rest Assured对List的序列化支持更稳定,尽量用List替代数组来包装元素。
  • 检查嵌套层级:确保data/steps/data的层级结构和Postman中的请求体完全一致,层级错误会导致参数无法识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:05:19