首页 > 其他分享 >关于Gin如何在multipart/form-data请求下解析JSON数组

关于Gin如何在multipart/form-data请求下解析JSON数组

时间:2023-07-03 19:24:43浏览次数:36  
标签:form int JSON multipart images Gin

前言

众所周知,在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

完结撒花~

标签:form,int,JSON,multipart,images,Gin
From: https://www.cnblogs.com/Vikyanite/p/17523765.html

相关文章

  • Cisco Catalyst 8000 Series Edge Platforms, IOS XE Release Dublin-17.11.01a ED
    CiscoCatalyst8000SeriesEdgePlatforms,IOSXEReleaseDublin-17.11.01aEDCiscoCatalyst8000边缘平台系列请访问原文链接:https://sysin.org/blog/cisco-catalyst-8000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoCatalyst8000:随心所欲访问位于......
  • C#的winform中控制TextBox中只能输入正整数
    txt_n是要输入的文本的名字privatevoidtxt_n_KeyPress(objectsender,KeyPressEventArgse){if(e.KeyChar!='\b')//这是允许输入退格键{intlen=txt_n.Text.Length;if(len......
  • OGG-02912 Patch 17030189 is required on your Oracle mining database for trail fo
    Therewillbeascript"prvtlmpg.plb"undergghomedirectory[oracle@OGGR2-1ogg]$ls-lrtprvtlmpg.plb-rw-r-----1oracleoinstall9487May272015prvtlmpg.plb[oracle@OGGR2-1ogg]$pwd/ogg[oracle@OGGR2-1ogg]$Logintothedatabaseand......
  • 【JAVA基础】JSON转换
    JSON转换json字符串与dto转换publicJsonDataJtMdmResultDataDTOreceiveinfoMQ(StringreqContent){JtMdmMaterialReqDTOjtMdmMaterialReqDTO=newJtMdmMaterialReqDTO();List<JsonDataJtMdmResultDataInfosDTO>jsonDataJtMdmResultDataInfoDTOList......
  • Winform ShowDialog如何让先前Show的窗体可以交互
    背景描述最近项目中有一个需求,全局有一个共用的窗体,能够打开不同模块的报告,由于需要兼容不同模块,代码复杂,启动速度慢。优化方案为将窗体启动时就创建好,需要查看报告时,使用此单例弹窗加载不同模块下的报告。原项目模块是通过在主框架(Form1)下加载不同Tab页实现的,因此查看报告弹窗(F......
  • 如何在AutoCAD中快速将矢量数据导出到shp、mdb、kml、geojson、gpx文件?
    在AutoCAD中借助GIS4CAD插件能为您提供便捷的矢量数据导出功能,不论是shp、mdb、kml、geojson还是gpx等矢量文件格式都能轻松导出。方法/步骤下载并安装GIS4CAD插件http://www.geosaas.com/download/gis4cad.exe 下载并安装GIS4CAD插件,安装成功后在AutoCAD菜单栏的最后会......
  • 如何在AutoCAD中加载shp、mdb、kml、geojson、gpx等矢量数据?
    在AutoCAD中加载矢量数据是一个非常有用的功能,它可以帮助用户将多种不同格式的数据集合在一个平台上进行分析和编辑。按照以下步骤可快速在AutoCAD中加载shp、mdb、kml、geojson、gpx等矢量数据。方法/步骤下载并安装GIS4CAD插件http://www.geosaas.com/download/gis4cad.e......
  • ObjectMapper向前端响应json数据,将java对象与json字符串互相转换
    向前端直接返回json数据,使用ObjectMapper ObjectMapper是Jackson提供的一个类,作用是将java对象与json字符串相互转化。依赖:<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>......
  • 多线程避免使用SimpleDateFormat及替代方案
    先来看一个多线程下使用例子,看到运行结果会出现异常:importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Random;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclass......
  • SimpleDateFormat的setLenient(true或false)-----自动计算日期
    有时候我们需要判断用户的日期格式是否正确,虽然绝大多数会在前台处理,但是也有需要从文件流读入的情况,如果日期不合格就需要抛异常,这时候就需要禁止SimpleDateFormat的自动计算功能。此时就需要用到setLenient(),这个方法的含义是是否严格解析日期,具体用法如下。packagecom.test.......