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

Spring REST Docs如何记录Multipart表单列表参数?

解决Spring RestDocs表单列表参数文档记录问题

问题分析

你遇到的错误是因为Spring RestDocs默认会严格匹配请求参数名,文档里写的rows[].id和实际请求中的rows[0].id、rows[1].id不匹配,导致校验失败。

解决方案:忽略列表索引

Spring RestDocs提供了ignoringIndexes()方法,专门处理这类列表参数的索引问题,允许你用统一的rows[].id格式匹配所有带索引的列表项参数,不用逐个编写带索引的参数名。

修改测试代码中requestParameters部分:

requestParameters(
        parameterWithName("rows[].id").ignoringIndexes().description("row id")
)

完整修改后的测试代码如下:

mockMvc.perform(
        multipart("/sample")
                .file(new MockMultipartFile("file", "level.zip", "application/zip", "level.zip".getBytes()))
                .param("rows[0].id", "1")
                .param("rows[1].id", "2")
                .contentType(MediaType.MULTIPART_FORM_DATA)
        )
        .andDo(document(
                "Sample",
                requestParts(
                        partWithName("file").description("level zip file")
                ),
                requestParameters(
                        parameterWithName("rows[].id").ignoringIndexes().description("row id")
                )
            )
        );

修改后,RestDocs会自动识别所有rows[N].id格式的参数,同时只生成一条关于rows[].id的文档记录,满足你不想写带索引参数名的需求。

进阶可选方案

如果需要更灵活的参数匹配规则,可以自定义ParameterMatcher实现自己的参数名匹配逻辑,但对于大多数场景,ignoringIndexes()已经足够简洁好用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:15:02