gin将请求体绑定到不同的结构体中
gin将请求体绑定到不同的结构体中
绑定请求体的常规方法使用c.Request.Body
,并且不能多次调用
type formA struct {Foo string `json:"foo" xml:"foo" binding:"required"`
}type formB struct {Bar string `json:"bar" xml:"bar" binding:"required"`
}func SomeHandler(c *gin.Context) {objA := formA{}objB := formB{}// This c.ShouldBind consumes c.Request.Body and it cannot be reused.if errA := c.ShouldBind(&objA); errA == nil {c.String(http.StatusOK, `the body should be formA`)// Always an error is occurred by this because c.Request.Body is EOF now.} else if errB := c.ShouldBind(&objB); errB == nil {c.String(http.StatusOK, `the body should be formB`)} else {...}
}
同样,你能使用c.ShouldBindBodyWith
func SomeHandler(c *gin.Context) {objA := formA{}objB := formB{}// This reads c.Request.Body and stores the result into the context.if errA := c.ShouldBindBodyWith(&objA, binding.JSON); errA == nil {c.String(http.StatusOK, `the body should be formA`)// At this time, it reuses body stored in the context.} else if errB := c.ShouldBindBodyWith(&objB, binding.JSON); errB == nil {c.String(http.StatusOK, `the body should be formB JSON`)// And it can accepts other formats} else if errB2 := c.ShouldBindBodyWith(&objB, binding.XML); errB2 == nil {c.String(http.StatusOK, `the body should be formB XML`)} else {...}
}
c.ShouldBindBodyWith
在绑定之前将body存储到上下文中,这对性能有轻微影响,因此如果你要立即调用,则不应使用此方法- 此功能仅适用于这些格式 --
JSON
,XML
,MsgPack
,ProtoBuf
。对于其他格式,Query
,Form
,FormPost
,FormMultipart
, 可以被c.ShouldBind()
多次调用而不影响性能
gin将请求体绑定到不同的结构体中相关推荐
- Gin 框架学习笔记(01)— 自定义结构体绑定表单、绑定URI、自定义log、自定义中间件、路由组、解析查询字符串、上传文件、使用HTTP方法
要实现一个 API 服务器,首先要考虑两个方面:API 风格和媒体类型.Go 语言中常用的 API 风格是 RPC 和 REST,常用的媒体类型是 JSON.XML 和 Protobuf.在 Go A ...
- c语言结构体反射解析,C语言结构体解析
我们知道定义一个数组就等于定义了多个相同类型的变量,它们的类型是一样的.有时有这样的需求,如果我想保存一些信息,但每个信息类型不一定相同,这时该怎么办?我们就可以自己定义一类型,而这个类型,就是结构体 ...
- malloc 结构体_算法与数据结构——结构体变量
首先,要学习数据结构,一般要先了解结构体变量的使用,那么该如何定义结构体变量呢?随我一起回忆一下吧.(不一样的音乐,不一样的体验)(1)直接定义结构体变量.struct {int a; ...
- c语言结构体与共同体课件,《结构体与共同体》PPT课件.ppt
<<结构体与共同体>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<结构体与共同体>PPT课件.ppt(44页珍藏版)>请在装配图网上搜索. 1 ...
- 通过结构体某个成员的地址计算结构体首地址 (转)
最近在CU论坛上有很多人在问这样一个问题:给出一个结构体成员的地址计算该结构体的起始地址.其实这个题我之前也没有接触过,据说内核代码中有这样用的,但还没有看到.不过觉得这个题的解决方法还是有一定技巧的 ...
- 【精华文】C语言结构体特殊情况分析:结构体指针 / 基本数据类型指针,指向其他结构体
参考链接:Structure pointer pointing to different structure instance 注:可以查看此篇的问题和唯一的回复,那是相对正确的,不要看comment ...
- Golang——结构体创建与初始化、结构体与数组、结构体与切片、结构体与map、结构体作为函数参数、结构体方法、结构体方法继承
结构体: 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体可以很好的管理一批有联系的数据,使用结构体可以提高程序的易读性,类似于Java的类一样 不能在结构体直接赋值 字段名必须唯一 ...
- C++工作笔记-结构体与类的进一步探究(在C++中的结构体,非C语言结构体)
今天把Qt Creator中的项目放到VS上,使用MSVC编译器发现跑不动链接错误,报的是如下的这个错误: 我在Qt上用MinGW明明不会报错,而他却说链接不到,日了个狗. 后面根据报错提示,我把如下 ...
- c语言 给结构体赋初值,c/c++ 结构体赋初值的小技巧
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 转:https://blog.csdn.net/datase/article/details/78988320 1.CC++结构体的初始化 今天看到项目中 ...
最新文章
- spring的自生一个bug
- 5 java中的集合类_java基础(5)-集合类1
- Linux下qt桌面程序闪退,qt无法正常使用
- Python基础知识(第八天)
- 诺基亚继续打情怀牌:怀旧小屏手机入网!
- 如何在Ruby on Rails迁移中重命名数据库列?
- C语言简明教程--指针5
- 邮箱smtp服务-QQ邮箱163邮箱(保姆级图文)【杂记】
- MySQL 有哪些锁?
- mysql 如何去掉毫秒_mysql 如何去掉毫秒值
- html文档在word打开是乱码怎么解决,word打开是乱码的解决方法
- 怎么把pdf文件转换成word格式文档
- 危险废物自动化立体仓库设计方案
- 【英语阅读】纽约时报 | 台湾美食为什么那么“Q”?
- 手把手教你脑电波采集及信号处理分析 - 知乎
- fceux源码解析_FCEUX金手指加强版 - 使用Lua脚本语言编写FC/NES金手指脚本
- 使用 hugegraph-studio 插入电影数据并查询
- LintCode 183.木材加工
- css 高度塌陷_css中父元素高度塌陷是什么意思,如何解决?(附代码)
- KISS原则和YAGNI原则
热门文章
- 【错误记录】Flutter 设备连接显示 Loading... ( 断网 | 删除 flutter/bin/cache/lockfile 文件 )
- 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com
- python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...
- 2019.04.09 电商23 用户未登录操作数据库
- springboot2.X 在项目启动后执行一段自定义代码
- CSS笔记(十)position属性与定位
- Ubuntu 使用 heirloom-mail 调用外部邮箱 SMTP 服务器发送邮件
- 空指针错误 java.lang.NullPointerException 浅谈
- 2018-2019-1 20189218《Linux内核原理与分析》第五周作业
- ORACLE安装报错解决