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

