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

Rest Assured多部件POST请求:如何封装表单参数为嵌套对象

在Rest Assured中发送嵌套结构的多部件请求(含视频文件)

首先得明确一个关键点:如果要在请求里包含二进制文件(比如你的视频),是没办法用纯application/json格式的——JSON本身不支持直接嵌入二进制数据,必须用multipart/form-data类型的请求。你之前用formParam和multiPart能正常运行,本质上就是用了这种多部件格式,现在要做的是把参数封装成嵌套的sample对象,其实只需要调整参数的命名方式或者用Rest Assured的参数前缀功能就行。

方案1:使用参数前缀(最简洁)

Rest Assured提供了paramPrefix方法,可以给所有表单参数统一添加前缀,这样就能轻松构造出嵌套的结构:

given()
    .header("Accept", "application/json")
    .header(auth)
    .config(rConfig)
    .paramPrefix("sample") // 给所有后续表单参数加上sample前缀
    .formParam("name", "Video Upload") // 实际发送的参数名是sample[name]
    .formParam("kind", "upload") // 实际发送的参数名是sample[kind]
    .multiPart("video_file", new File("path"), "video/mp4") // 对应sample[video_file]
    .log().all()
.expect()
    .statusCode(expectedStatusCode)
.post(url);

这种方式下,后端会自动把这些参数解析成你需要的嵌套结构:

{"sample": {"name": "Video Upload", "kind": "upload", "video_file": [视频文件]}}

方案2:手动指定嵌套参数名

如果你不想用前缀,也可以直接在参数名里写嵌套路径,和你之前的写法类似,但更统一:

given()
    .header("Accept", "application/json")
    .header(auth)
    .config(rConfig)
    .multiPart("sample[name]", "Video Upload")
    .multiPart("sample[kind]", "upload")
    .multiPart("sample[video_file]", new File("path"), "video/mp4")
    .log().all()
.expect()
    .statusCode(expectedStatusCode)
.post(url);

关于application/json的补充说明

如果你的后端非要接收application/json格式,那只能把视频文件转换成Base64编码后嵌入JSON,但非常不推荐这么做:

  • 视频文件体积大,Base64会让体积再增加30%左右,严重影响请求性能
  • 后端处理Base64编码的文件也会更麻烦,需要额外解码步骤

所以优先选择multipart/form-data的方案,这也是文件上传的标准做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:41:53