当我刚刚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)
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。