gin实例--参数绑定(5)

3,925 阅读1分钟

源码

github.com/zsl10/gin-e…

数据绑定

  • Gin 提供了非常方便的数据绑定功能,可以将用户传来的参数自动跟我们定义的结构体绑定在一起。
  • 模型绑定可以将请求体绑定给一个类型,目前支持绑定的类型有 JSON, XML 和标准表单数据 (foo=bar&boo=baz)。
  • 绑定时需要给字段设置绑定类型的标签。比如绑定 JSON 数据时,设置 json:"fieldname"。 使用绑定方法时,Gin 会根据请求头中 Content-Type 来自动判断需要解析的类型。如果你明确绑定的类型,你可以不用自动推断,而用 BindWith 方法。
  • 可以指定某字段是必需的。如果一个字段被 binding:"required" 修饰而值却是空的,请求会失败并返回错误。

代码实例

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// 定义接收数据的结构体
// binding:"required":校验规则,不能为空
type Login struct {
	User     string `form:"user" json:"user" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

func main() {
	router := gin.Default()

	// 1) 绑定 url query
	router.GET("/test/url/query", func(c *gin.Context) {
		// 声明接收的变量
		var urlQuery Login
		// 将request的query中的数据,自动解析到结构体
		if err := c.ShouldBindQuery(&urlQuery); err != nil {
			c.String(http.StatusBadRequest, err.Error())
		}
		c.String(http.StatusOK, "Success")
	})

	// 2) 绑定表单参数
	router.POST("/form", func(c *gin.Context) {
		var form Login
		if err := c.Bind(&form); err != nil {
			c.String(http.StatusBadRequest, err.Error())
		}
		c.String(http.StatusOK, "Success")
	})

	// 3) 绑定json数据
	router.POST("/json", func(c *gin.Context) {
		var json Login
		if err := c.ShouldBindJSON(&json); err != nil {
			c.String(http.StatusBadRequest, err.Error())
		}
		c.String(http.StatusOK, "Success")
	})




	router.Run(":8080")
}