首页 > 后端开发 > Golang > 如何自定义 Go Gin 结构标签验证的错误消息?

如何自定义 Go Gin 结构标签验证的错误消息?

Mary-Kate Olsen
发布: 2024-12-06 21:25:15
原创
474 人浏览过

How Can I Customize Error Messages from Go Gin's Struct Tag Validation?

在 Go Gin 中自定义结构标记验证的错误消息

Gin 是一个流行的 Go Web 框架,使用 go-playground/validator/ v10 用于结构验证。当验证失败时,它通常会返回详细的错误消息。本文探讨如何自定义这些消息以提供更人性化的体验。

理解错误类型

Gin 的验证返回的错误是验证器。ValidationErrors 。此错误类型包含 validator.FieldErrors 的集合,每个都代表无效字段及其验证标记。

自定义错误消息

要自定义错误消息,我们可以使用 error.As 函数将 validator.ValidationErrors 转换为错误。转换后,我们可以访问各个 validator.FieldErrors 并根据所使用的验证标签构造自定义错误消息。

创建自定义错误模型

首先,我们定义自定义错误模型,例如:

type ApiError struct {
    Field string
    Msg   string
}
登录后复制

自定义验证错误消息标签

接下来,我们定义一个辅助函数来将验证标签映射到自定义错误消息:

func msgForTag(tag string) string {
    switch tag {
    case "required":
        return "This field is required"
    case "email":
        return "Invalid email"
    }
    return ""
}
登录后复制

绑定和处理验证错误

在我们的处理函数中,我们可以将请求绑定到我们的结构并检查验证错误:

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
}
登录后复制

示例输出

使用此自定义错误处理,我们可以返回以下格式的 JSON 响应:

{
    "errors": [
        {
            "Field": "Number",
            "Msg": "This field is required"
        }
    ]
}
登录后复制

这为用户提供了更加用户友好且信息丰富的错误响应。

以上是如何自定义 Go Gin 结构标签验证的错误消息?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板