关于Gin如何在multipart/form-data请求下解析JSON数组
前言#
众所周知,在Gin下,如果只是在multipart/form-data请求下解析JSON对象到结构体的话就比较简单。但是如果是要解析JSON数组到对应请求结构体呢?
正文#
举个例子:
type AddItem struct {
ID int `form:"-"`
Images []*multipart.FileHeader `form:"images"`
RelatedItems []int `form:"relatedItems"`
RelatedStores []int `form:"relatedStores"`
}
然后前端传来的数据是这样子:
{
"images": {<FileSteams1>},
"images": {<FileSteams2>},
"relatedItems": [1, 2, 3],
"relatedStores": [4, 5, 6]
}
(别问为什么前端不像传images字段一样传递数组过来,问就是前端觉得麻烦,卑微后端在线听前端任意使唤)
然后当我们用APIPost模拟前端发送请求,就会发现解析失败了:
这是为什么呢?
很简单,因为你给RelatedIds定义的是int
类型,而你传入的确实'[1,2,3]'
的string
类型,所以ShouldBind
方法会将RelatedIds
识别成int
解决方案#
当然强大的Gin自然有它的解决办法,那就是定义一个结构体,然后以JSON的格式传入就行,如下:
type AddItem struct {
ID int `form:"id"`
Images []*multipart.FileHeader `form:"images"`
Related Related `form:"related"`
}
type Related struct {
ItemIds []int `json:"itemIds"`
StoreIds []int `json:"storeIds"`
}
然后就发现可以传进去并且没有报bug啦~
完结撒花~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)