gin数据解析和绑定

1. Json 数据解析和绑定

  • 客户端传参,后端接收并解析到结构体

    package main

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

    // 定义接收数据的结构体
    type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User string form:"username" json:"user" uri:"user" xml:"user" binding:"required"
    Pssword string form:"password" json:"password" uri:"password" xml:"password" binding:"required"
    }

    func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    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.Pssword != "admin" {
    c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
    return
    }
    c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
    }

2. 表单数据解析和绑定

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded">
        用户名<input type="text" name="username"><br>
        密码<input type="password" name="password">
        <input type="submit" value="提交">
    </form>
</body>
</html>

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    // JSON绑定
    r.POST("/loginForm", func(c *gin.Context) {
        // 声明接收的变量
        var form Login
        // Bind()默认解析并绑定form格式
        // 根据请求头中content-type自动推断
        if err := c.Bind(&form); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判断用户名密码是否正确
        if form.User != "root" || form.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
}

3. URI数据解析和绑定

复制代码
package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    // JSON绑定
    r.GET("/:user/:password", func(c *gin.Context) {
        // 声明接收的变量
        var login Login
        // Bind()默认解析并绑定form格式
        // 根据请求头中content-type自动推断
        if err := c.ShouldBindUri(&login); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判断用户名密码是否正确
        if login.User != "root" || login.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
}
相关推荐
神奇侠20241 天前
快速开发-基于gin的中间件web项目开发
中间件·gin
Zyxalia5 天前
gin + es 实践 03
elasticsearch·jenkins·gin
Zyxalia5 天前
gin + es 实践 01
大数据·elasticsearch·gin
柯南二号5 天前
Go使用Gin写一个对MySQL的增删改查服务
mysql·golang·gin
Zyxalia6 天前
gin + es 实践 05
大数据·elasticsearch·gin
Zyxalia6 天前
gin + es 实践 07
网络·elasticsearch·gin
pedestrian_h9 天前
gRPC学习笔记记录以及整合gin开发
笔记·学习·golang·gin·grpc
liuyunshengsir12 天前
Gin 集成 prometheus 客户端实现注册和暴露指标
prometheus·gin
唐僧洗头爱飘柔952713 天前
(Go Gin)Gin学习笔记(三)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
golang·gin·数据绑定·数据解析·web开发框架·数据结构体分析
唐僧洗头爱飘柔952713 天前
(Go Gin)Gin学习笔记(二):路由配置、基本路由、表单参数、上传单个文件、上传多个文件、浅扒路由原理
学习·golang·gin·路由参数·路由配置·web开发框架·路由组