如何在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
相关产品推荐
相关产品推荐

