Laravel使用l5-swagger编写GET接口文档如何传递嵌套数组参数
问题原因
你的配置缺少OpenAPI 3.0针对query参数的序列化规则声明,默认序列化逻辑不会给嵌套数组增加索引,导致同名字段的传值被覆盖,无法解析为预期的对象数组结构。
- OpenAPI默认的query参数序列化规则不支持复杂嵌套对象/数组的带索引传参,需要主动声明序列化风格
- 你当前定义的query参数没有指定
style和explode属性,Swagger UI会使用默认的form风格序列化参数,直接展开数组键名而不带索引
解决方案
给你的query参数增加序列化规则配置,使用OpenAPI 3.0专门支持嵌套对象传参的deepObject风格即可实现预期的带索引参数序列化:
- 修改控制器中的参数注解,添加
style="deepObject"和explode=true配置:
* @OA\Parameter( * name="request_body", * in="query", * description="all request data which needed", * required=false, * style="deepObject", * explode=true, * @OA\Schema( * ref="#/components/schemas/EstateListRequest" * )
- 重新生成swagger文档
执行命令php artisan l5-swagger:generate重新生成api-docs.json,确认生成的参数配置中已经包含"style": "deepObject"和"explode": true属性。 - 验证效果
重新打开Swagger UI填写参数发起请求,此时生成的URL会自动携带数组索引,PHP端可以正常解析为预期的多维数组结构。
补充说明
如果你的参数结构非常复杂,嵌套层级较多,更推荐使用POST请求通过JSON body传递参数,避免GET请求URL长度限制和序列化规则兼容问题。
内容的提问来源于stack exchange,提问作者shuba.ivan
相关产品推荐
相关产品推荐

