gin的ShouldBind方法遇到的问题
// package models
type ListReqInfo struct {
Keyword string `form:"keyword" default:""` //模糊关键字
PageNum int `form:"pageNum" binding:"required" default:"1"` //页数
PageSize int `form:"pageSize" binding:"required" default:"10"` //页大小
OrderName string `form:"orderName" default:"created_on"` //排序列
OrderType string `form:"orderType" default:"desc"` //排序方式 desc asc
}
// @Tags 文章
// @Summary 分页获取文章
// @Produce json
// @Param ReqInfo body models.ListReqInfo false "info"
// @Success 200 {object} app.Response
// @Failure 500 {object} app.Response
// @Router /api/v1/article/list [post]
func (a Article) List(c *gin.Context) {
var (
appG = app.Gin{C: c}
param models.ListReqInfo
paramMap map[string]interface{}
)
c.ShouldBind(¶m)//代码1
c.ShouldBind(¶mMap)//代码2
jsonData, _ := c.GetRawData()//代码3也获取不到值
代码1和代码2只要注释任何一行,都能把前端参数填充进来。但两行都不注释,则出现先运行的填充成功,后运行的则无值。
不知道有没有人遇到过,是怎么解决的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以使用
c.ShouldBindBodyWith(¶m,binding.JSON)
方法。这个方法,body 会cache 到上下文中,重复绑定不会有问题。
把返回值
error
打出来,应该是有error
的。error
的原因应该是http的request.Body
只能读一次,第二次读的时候返回了EOF
的错误。