【发布时间】:2021-09-28 20:08:11
【问题描述】:
验证器结构
type RegisterValidator struct {
Name string `form:"name" json:"name" binding:"required,min=4,max=50"`
Email string `form:"email" json:"email" binding:"required,email,min=4,max=50"`
Password string `form:"password" json:"password" binding:"required,min=8,max=50"`
MobileCountryCode int `form:"mobile_country_code" json:"mobile_country_code" binding:"required,gte=2,lt=5"`
Mobile int `form:"mobile" json:"mobile" binding:"required,gte=5,lt=15"`
UserModel users.User `json:"-"`
}
如下格式化自定义错误:
type CustomError struct {
Errors map[string]interface{} `json:"errors"`
}
func NewValidatorError(err error) CustomError {
res := CustomError{}
res.Errors = make(map[string]interface{})
errs := err.(validator.ValidationErrors)
for _, v := range errs {
param := v.Param()
field := v.Field()
tag := v.Tag()
if param != "" {
res.Errors[field] = fmt.Sprintf("{%v: %v}", tag, param)
} else {
res.Errors[field] = fmt.Sprintf("{key: %v}", tag)
}
}
return res
}
在发送数据时工作
{
"email": "me@example.com",
"name": "John Doe",
"mobile_country_code": 1,
"mobile": 1234567
}
但发送的类型无效
{
"email": "me@example.com",
"name": "John Doe",
"mobile_country_code": "1",
"mobile": 1234567
}
抛出错误interface conversion: error is *json.UnmarshalTypeError, not validator.ValidationErrors
这个问题和这个有关:How to assert error type json.UnmarshalTypeError when caught by gin c.BindJSON 但是答案没有意义。
【问题讨论】:
标签: validation go go-gin