字段中未定义的验证函数“xxx”

uly*_*lyC 3 go go-gin

当我刚刚Gin从 v1.4.0 升级到 v1.5.0 时,我像往常一样使用“BindJSON”函数,并抛出此错误。

2019/11/29 11:44:13 [Recovery] 2019/11/29 - 11:44:13 panic recovered:
Undefined validation function 'exists' on field 'FirstName'
...
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

package main

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

type User struct {
    FirstName *string `json:"fn" binding:"exists"` 
}

    
func main(){
    router := gin.Default()
    router.POST("/register", func(c *gin.Context) {
        var user User
        if err := c.BindJSON(&user); err != nil {
            c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
                    "error": "first name cannot be empty",
                   })
            return
        }
    })

    router.Run(":8080")
}   
Run Code Online (Sandbox Code Playgroud)

uly*_*lyC 5

Gin.v1.4.0使用validator.v8进行验证,gin.v1.5.0使用validator.v9,validator删除exists 从v8到v9的标签。

所以你可以这样定义结构:

type User struct {
// FirstName *string `json:"fn" binding:"exists"`
FirstName *string `json:"fn" binding:"required"`
}

Run Code Online (Sandbox Code Playgroud)

同样,如果您使用“required”标签并收到此错误,请检查您的go.mod文件并尝试将“github.com/go-playground/validator/v8”升级到 v9 或 v10。