参数绑定
参数绑定
参考文档 https://blog.csdn.net/Octopus21/article/details/124404676
gin的参数绑定有多种方式,最常用的有4种:
- get url 参数直接携带绑定
- get rest 方式绑定
- post form 方式绑定
- 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)
...
}
表单校验
- 定义校验对象 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"`
}
- 代码中校验
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
}
...
}