专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

gin系列-参数绑定

为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type识别请求数据类型并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体中。 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSON、form表单和QueryString类型的数据,并把值绑定到指定的结构体对象。

前端

#index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ShouldBind</title>
</head>
<body>
<form action="/form" method="post">
    用户名:
    <input type="text" name="username">
    密码:
    <input type="password" name="password">
    <input type="submit" value="提交">
</form>
</body>
</html>

后端

#main.go
package main

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

type UserInfo struct {
    Username string `form:"username" json:"user"`
    Password string `form:"password" json:"pass"`
}

func main() {
    r := gin.Default()
    r.LoadHTMLFiles("./index.html")
    r.GET("/user", func(c *gin.Context) {
        //username := c.Query("username")
        //password := c.Query("password")
        //u := UserInfo{
        //  username: username,
        //  password: password,
        //}

        var u UserInfo  //声明一个UserInfo类型的变量u
        err := c.ShouldBind(&u)  //?
        if err != nil {
            c.JSON(http.StatusBadRequest, gin.H{
                "error": err.Error(),
            })
        } else {
            fmt.Printf("%#v\n",u)
            c.JSON(http.StatusOK, gin.H{
                "status":"ok",
            })
        }
    })

    r.GET("/index", func(c *gin.Context) {
        c.HTML(http.StatusOK,"index.html",nil)
    })

    r.POST("/json", func(c *gin.Context) {
        var u UserInfo  //声明一个UserInfo类型的变量u
        err := c.ShouldBind(&u)  //?
        if err != nil {
            c.JSON(http.StatusBadRequest, gin.H{
                "error": err.Error(),
            })
        } else {
            fmt.Printf("%#v\n",u)
            c.JSON(http.StatusOK, gin.H{
                "status":"ok",
            })
        }
    })
    //c.JSON(http.StatusOK,gin.H{
    //  "message": "ok",
    //})
    r.Run(":9090")
}

验证

json:对应的是user、pass
109_1.png
109_2.png
109_3.png
109_4.png
总结

ShouldBind会按照下面的顺序解析请求中的数据完成绑定:
如果是 GET 请求,只使用 Form 绑定引擎(query)。
如果是 POST 请求,首先检查 content-type 是否为 JSON 或 XML,然后再使用 Form(form-data)。

文章永久链接:https://tech.souyunku.com/38584

未经允许不得转载:搜云库技术团队 » gin系列-参数绑定

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们