【无标题】

Gin框架中获取请求参数方式

GET
    app := gin.Default()

    // 使用GET请求并获取参数
    app.GET("/user", func(c *gin.Context) {
        // 使用Query获取请求参数
        username := c.Query("username")
        password := c.Query("password")
    })
POST–From表单形式 关键词post
    app := gin.Default()

    // 使用POST请求并获取参数
    app.POST("/user", func(c *gin.Context) {
        // 使用PostForm获取请求参数
        username := c.PostForm("username")
        password := c.PostForm("password")
    })
POST–JSON形式 关键词Json
//先定义一个用来接收json数据的结构体,json:"username" 表示Username 用来返回给前端的key即这样返回
{
    "username":Username,
    "password":Password,
}
type User struct {
    Username string `json:"username"`
    Password string `json:"password"`
}

app := gin.Default()
// 使用POST请求并获取参数
app.POST("/user", func(c *gin.Context) {
    // 将JSON格式请求参数绑定到结构体上
    var user User
    if err := c.BindJSON(&user); err != nil {
        // 返回错误信息
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // 返回参数
    c.JSON(http.StatusOK,user)
})
URL参数(直接把参数写入url中) 关键词Param
	app := gin.Default()
	// 使用请求头部参数并获取参数
    app.GET("/user/:username/:password", func(c *gin.Context) {
        // 使用Request获取请求头部参数
        username := c.Request.Header.Get("username")
        password := c.Request.Header.Get("password")

        // 返回请求参数
        c.JSON(200, gin.H{
            "username": username,
            "password": password,
        })
    })
获取请求头参数 关键词Header
    app := gin.Default()
	// 使用请求头部参数并获取参数
    app.GET("/user", func(c *gin.Context) {
        // 使用Request获取请求头部参数
        username := c.Request.Header.Get("username")
        password := c.Request.Header.Get("password")

        // 返回请求参数
        c.JSON(200, gin.H{
            "username": username,
            "password": password,
        })
    })
自动映射参数,省去了重复的参数获取和类型转换 关键词Bind
// 定义需要绑定请求参数的结构体
//`form:"username" json:"username" binding:"required"`
// form表示前端传值key 为 front_username  把值绑定到Username字段
// json表示后端传值key 为 back_username   把Username字段的值相应给前端
type User struct {
    Username string `form:"front_username" json:"back_username" `
    Password string `form:"password" json:"password" `
}

app :=  gin.Default()

// 使用ShouldBind方法自动绑定请求参数到结构体,并进行校验
app.POST("/user", func(c *gin.Context) {
    var user User
    if err := c.ShouldBind(&user); err != nil {      //根据req的content type 自动推断如何绑定,form/json/xml等格式
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
    //响应数据
    c.JSON(200, user)
})

// 运行服务
app.Run(":8080")
只要需要提供结构体, 就能把各个部分的校验规则简单定义, 并且能够对请求中的参数进行一些简单的校验,只有校验通了才能真正的请求后端资源,拒绝无效请求 go完全可以 下面我们来看一些简单的校验规则

binding 标签用于指定 Gin 框架在绑定请求参数时应用的验证规则。通过在结构体字段上添加 binding 标签,你可以定义字段的验证规则,确保请求参数满足预期的条件。以下是一些常见的 binding 标签值和示例说明:

  1. "required": 该标签要求字段在请求中必须存在,否则绑定过程将返回错误。

    type User struct {
        Username string `form:"username" binding:"required"`
        Password string `form:"password" binding:"required"`
    }
    
  2. "min""max": 用于验证数字类型字段的最小和最大值。

    type AgeValidation struct {
        Age int `form:"age" binding:"required,min=18,max=99"`
    }
    
  3. "len""min": 用于验证字符串类型字段的长度。

    type NameValidation struct {
        Name string `form:"name" binding:"required,min=3,max=50"`
    }
    
  4. "email": 用于验证邮箱地址。

    type EmailValidation struct {
        Email string `form:"email" binding:"required,email"`
    }
    
  5. "url": 用于验证 URL 地址。

    goCopy codetype URLValidation struct {
        URL string `form:"url" binding:"required,url"`
    }
    

这些是一些基本的 binding 标签的使用示例。使用这些标签,你可以定义结构体字段的验证规则,确保请求参数的合法性。在实际应用中,你可以根据具体的验证需求选择合适的标签组合。

示例

package main

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

type User struct {
	Username string `form:"username" json:"username" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

func main() {
	app := gin.Default()

	app.POST("/ping", func(context *gin.Context) {
		var user User
		err := context.ShouldBind(&user)
		if err != nil {
			context.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		context.JSON(http.StatusOK, user)
	})

	app.Run()
}
  • 当我们的请求参数都传时

    在这里插入图片描述

  • 当我们请求参数只有username

    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值