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

使用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数组被完全覆盖。

解决步骤

  1. 调整请求端点:将POST目标改为/data/student(具体路径需匹配你的json-server数据结构),这会让json-server往data下的student数组里追加新元素。
  2. 简化请求体:不需要用StudentList包裹,直接发送单个学生对象即可。
  3. 对应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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:41:27