gin框架数据解析和绑定

1、解析和绑定JSON数据-ShouldBindJSON

通过ShouldBindJSON 解析从body里的数据
ctx.ShouldBindJSON(&jsonData)

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"`
}

func main() {
   // 1.创建路由
   r := gin.Default()
   // JSON绑定
   r.POST("loginJSON", func(c *gin.Context) {
      // 声明接收的变量
      var json Login
      // ******将request的body中的数据,自动按照json格式解析到结构体******
      if err := c.ShouldBindJSON(&json); err != nil {
         // 返回错误信息
         // gin.H封装了生成json数据的工具
         c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
         return
      }
      // 判断用户名密码是否正确
      if json.User != "root" && json.Password != "admin" {
         c.JSON(http.StatusBadRequest, gin.H{"message": "登录失败,密码错误"})
         return
      }
      c.JSON(http.StatusOK, gin.H{"data": json})
   })
   r.Run(":8000")
}

2、解析和绑定form数据-bind

/**
* 通过表单形式登录
 */
func loginByFormHandler(ctx *gin.Context) {

	var form Login

	//Bind()默认解析并绑定form格式
	//根据请求头中Content-type自动推动
	/**
	   如果 Content-type:application/json就会按json格式解析并绑定
	   如果 Content-type:application/x-www-form-urlencoded 就会按form格式解析并绑定
	**/
	if err := ctx.Bind(&form); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{
			"message": err.Error(),
		})
		return
	}
	if form.User != "admin" || form.Password != "admin" {
		ctx.JSON(http.StatusBadRequest, gin.H{
			"status":  "10001",
			"message": "登录失败",
		})
		return
	}
	ctx.JSON(http.StatusOK, gin.H{
		"status": "2000",
		"data":   form,
	})
}

3、解析和绑定URL数据-ShouldBindUri

/**
 * 根据uri来解析参数及绑定到对应的结构体对象
**/
func loginUriHandler(ctx *gin.Context) {
	var loginData Login

	if err := ctx.ShouldBindUri(&loginData); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{
			"message": err.Error(),
		})
		return
	}

	ctx.JSON(http.StatusOK, gin.H{
		"data": loginData,
	})
}
posted @ 2023-02-04 11:00  amu2018  阅读(249)  评论(0编辑  收藏  举报