Loading

关于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模拟前端发送请求,就会发现解析失败了:

image-20230703172731982

这是为什么呢?

很简单,因为你给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啦~

image-20230703190359980

完结撒花~

posted @ 2023-07-03 19:06  ViKyanite  阅读(227)  评论(0编辑  收藏  举报