Skip to content

参数绑定

参数绑定

参考文档 https://blog.csdn.net/Octopus21/article/details/124404676
gin的参数绑定有多种方式,最常用的有4种:

  1. get url 参数直接携带绑定
  2. get rest 方式绑定
  3. post form 方式绑定
  4. post json 方式绑定

下面一一说明。

1.get url 参数直接携带绑定

shell
http://localhost:8000/controller/user?userId=123

获取方式

shell
func (this UserController) Index(ctx *gin.Context) {
    userId := ctx.Query("userId")
    ...
}

2. get rest 方式绑定

go
zRouter.GET("/user/get/:userId", UserController{}.Get)

url请求如下:

shell
http://localhost:8000/controller/user/get/123

获取代码如下:

shell
func (this UserController) Get(ctx *gin.Context) {
    userId := ctx.Param("userId")
    ...
}

3. post form 方式绑定

url请求如下:

shell
curl --location --request POST "http://localhost:8000/controller/user/update" --form "name=\"鱼刺\"" --form "age=\"17\""

获取代码如下:

shell
func (this UserController) Update(ctx *gin.Context) {
	var userInfo entity.UserInfo
	userInfo.Name = ctx.PostForm("name")
	userInfo.Age, _ = strconv.Atoi(ctx.PostForm("age"))
	slog.Info("用户姓名:%v,用户年龄%v", userInfo.Name, userInfo.Age)
    ...
}

4. post json 方式绑定

post请求如下:

shell
curl --location --request POST "http://localhost:8000/controller/user/add" --header "Content-Type: application/json" --data-raw "{ \"name\":\"冯晓东\",\"age\":18}"

获取json代码如下:

shell
func (this UserController) Add(ctx *gin.Context) {
    var userInfo entity.UserInfo
    err := ctx.ShouldBind(&userInfo)
    slog.Info("用户姓名:%v,用户年龄%v", userInfo.Name, userInfo.Age)
    ...
}

表单校验

  1. 定义校验对象 binding
shell
type UserInfo struct {
	UserId string `json:"userId"`
	Name   string `json:"name" binding:"required"`
	Age    int    `json:"age" binding:"required,min=15,max=20"`
}
  1. 代码中校验
shell
func (this UserController) Add(ctx *gin.Context) {
    var userInfo entity.UserInfo
    if err := ctx.ShouldBind(&userInfo); err != nil {
        ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    ...
}