1 回答
TA贡献1852条经验 获得超7个赞
Gin gonic 使用该包github.com/go-playground/validator/v10
执行绑定验证。如果验证失败,则返回的错误为validator.ValidationErrors
.
这没有明确提及,但在模型绑定和验证中它指出:
Gin 使用 go-playground/validator/v10 进行验证。在此处查看有关标签使用的完整文档。
该链接指向go-playground/validator/v10
文档,您可以在其中找到段落Validation Functions Return Type error。
您可以使用标准errors
包来检查错误是否是那个,打开它,然后访问单个字段,即validator.FieldError
. 由此,您可以构建任何您想要的错误消息。
给定这样的错误模型:
type ApiError struct {
Field string
Msg string
}
你可以这样做:
var u User
err := c.BindQuery(&u);
if err != nil {
var ve validator.ValidationErrors
if errors.As(err, &ve) {
out := make([]ApiError, len(ve))
for i, fe := range ve {
out[i] = ApiError{fe.Field(), msgForTag(fe.Tag())}
}
c.JSON(http.StatusBadRequest, gin.H{"errors": out})
}
return
}
使用辅助函数为您的验证规则输出自定义错误消息:
func msgForTag(tag string) string {
switch tag {
case "required":
return "This field is required"
case "email":
return "Invalid email"
}
return ""
}
在我的测试中,这输出:
{
"errors": [
{
"Field": "Number",
"Msg": "This field is required"
}
]
}
PS:要获得带有动态键的 json 输出,您可以使用map[string]string固定结构模型来代替。
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报