使用Rest Assured发送Post请求时覆盖原有数据问题求助
问题:使用json-server时Post请求添加新学生会覆盖原有数据
我在用json-server和模拟JSON数据,每次通过Post请求添加新学生(比如id=100)时,之前的学生(id=14)会被删除,然后才创建新学生。
请求负载
{ "data": { "studname": null, "student": [ { "name": "JJJ", "location": null, "phone": null, "courses": null, "id": 14 } ] } }
Rest Assured代码(Eclipse中运行)
@Test public void addStudentData() { StudentList Studentdetails = new StudentList(); StudentsDetails mainDetails = new StudentsDetails(); mainDetails.setName("JJJ"); mainDetails.setId(15); List<StudentsDetails> details = new ArrayList<StudentsDetails>(); details.add(mainDetails); Studentdetails.setStudent(details); given() .contentType("application/json") .body(Studentdetails) .when() .post(EndPoints.CREATE_STUDENTS) .then() .extract().response().asString(); }
请求输出(状态码201)
"data": { "studname": null, "student": [ { "name": "James", "location": null, "phone": null, "courses": null, "id": 101 } ] }
问题原因与解决方法
原因
json-server默认行为:如果POST请求直接发送到/data这类顶级资源路径,它会替换整个资源,而非在子数组中追加元素。当前请求是把包含单个学生的数组发送给data节点,导致原有student数组被完全覆盖。
解决步骤
- 调整请求端点:将POST目标改为
/data/student(具体路径需匹配你的json-server数据结构),这会让json-server往data下的student数组里追加新元素。 - 简化请求体:不需要用
StudentList包裹,直接发送单个学生对象即可。 - 对应Java代码调整:
@Test public void addStudentData() { StudentsDetails mainDetails = new StudentsDetails(); mainDetails.setName("JJJ"); mainDetails.setId(15); given() .contentType("application/json") .body(mainDetails) .when() .post("/data/student") // 替换为正确的端点路径 .then() .extract().response().asString(); }
调整后发送请求,新学生将被追加到原有student数组中,不会覆盖已有数据。
内容的提问来源于stack exchange,提问作者Gourav Shivalkar
相关产品推荐
相关产品推荐

