三、gin数据解析和绑定
例子中的结构体
type Login struct {
// binding:"required"修饰的字段,为必填字段,若接收为空值,则报错
User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
1. json数据解析和绑定
-
客户端传参,后端接收并解析到结构体
关键函数 c.ShouldBindJSON后台代码
//创建默认路由 r := gin.Default() r.POST("/login", func(c *gin.Context) { // 声明接收的变量 var login Login // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&login); err != nil { //返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusBadRequest, gin.H{ "error": err, }) return } // 判断用户名密码是否正确 if login.User != "admin" || login.Password != "123" { c.JSON(http.StatusBadRequest,gin.H{ "error":"not right", }) } c.JSON(http.StatusOK,gin.H{ "error":"", }) }) r.Run(":8080")
传入参数(windows平台)
curl http://127.0.0.1:8080/login -H 'content-type:application/json' -d "{\"user\":\"admin\",\"password\":\"123\"}" -X POST
返回值
{"error":""}
2. 表单数据解析和绑定
-
解析表单数据到结构体
关键函数 c.Bind()
后台代码r.POST("/login", func(c *gin.Context) { // 声明接收的变量 var login Login // 将request的body中的数据,自动按照form格式解析到结构体 if err := c.Bind(&login); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "accept failed", }) return } // 判断用户名密码是否正确 if login.User != "admin" || login.Password != "123" { c.JSON(http.StatusBadRequest, gin.H{ "error": "not right", }) return } c.JSON(http.StatusOK, gin.H{ "error": "", }) })
前端代码:
<form action="http://127.0.0.1:8080/login" method="post" enctype="application/x-www-form-urlencoded"> user  :<input type="text" name="username"> <br> pwd  :<input type="password" name="password"> <br> <input type="submit" value="登录"> </form>
返回值
{"error":""}
3. URI数据解析和绑定
-
解析URI数据到结构体
关键函数 c.BindUri()
后台代码r.GET("/:user/:password", func(c *gin.Context) { // 声明接收的变量 var login Login // 将request的body中的数据,自动按照form格式解析到结构体 if err := c.BindUri(&login); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "accept failed", }) return } // 判断用户名密码是否正确 if login.User != "admin" || login.Password != "123" { c.JSON(http.StatusBadRequest, gin.H{ "error": "not right", }) return } c.JSON(http.StatusOK, gin.H{ "error": "", }) })
传入参数
curl http://127.0.0.1:8080/admin/123
返回值
{"error":""}