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

如何使用REST Assured在POST请求中传递@RequestParam参数

问题根源

你的接口是multipart/form-data类型的文件上传接口,所有@RequestParam参数都需要放在请求体的表单字段中,你目前用queryParam将metadata参数放在了URL查询串里,服务端从请求体中读取不到对应参数,所以返回400错误。

具体错误点

  • 传参方式错误:queryParam是将参数拼接到URL末尾,而文件上传接口要求参数放在multipart格式的请求体中,需要用Rest Assured的multiPart方法传递表单字段
  • 未正确声明multipart请求格式:Rest Assured不会自动识别文件上传场景,调用multiPart方法后才会自动设置正确的Content-Type请求头

修正后的代码

public void havePostCall(String endpoint) throws IOException {
    String url = be.getBaseUrl() + endpoint;
    String reqPayload;
    // 用try-with-resources自动关闭输入流,避免资源泄漏
    try (FileInputStream fisFile = new FileInputStream(new File("替换为你的json文件实际路径"))) {
        reqPayload = IOUtils.toString(fisFile, "UTF-8");
    }

    Response rs = RestAssured.given()
            .header("Authorization", "替换为实际的token值")
            // 用multiPart传递表单字段metadata
            .multiPart("metadata", reqPayload)
            // 如果需要上传文件,放开下面这行注释,替换为实际文件路径即可,不需要上传则直接省略
            // .multiPart("file", new File("替换为要上传的文件路径"))
            .when()
            .post(url)
            .then()
            .assertThat()
            .statusCode(200)
            .extract()
            .response();
    System.out.print("Response is ==" + rs.asString());
}

如果服务端要求即使不上传文件也要携带空的file字段,可以额外加一行.multiPart("file", new MultipartFile[0])适配即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:21:00