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,
})
}