首页 > 后端开发 > Golang > 如何使用 Struct 标签在 Gin 1.17 中自定义验证错误消息?

如何使用 Struct 标签在 Gin 1.17 中自定义验证错误消息?

Patricia Arquette
发布: 2024-12-07 16:27:18
原创
570 人浏览过

How to Customize Validation Error Messages in Gin 1.17 Using Struct Tags?

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

在 Gin 1.17 中,在数据库操作之前使用结构标签验证进行数据验证非常简单。虽然默认的错误消息很冗长,但可以自定义它们以提供更清晰的用户反馈。

问题概述

Gin 使用 github.com/go-playground/validator/v10 包来实现验证。当验证失败时,它返回一个 validator.ValidationErrors 对象。此详细错误消息包含有关验证失败的每个字段的信息。

自定义错误消息

要获取自定义错误消息,您可以:

  • 解包标准错误使用错误包进行输入。
  • 从解包的包中访问各个 validator.FieldError 对象validator.ValidationErrors。
  • 构建自定义错误模型,并使用字段名称和由字段验证标记确定的自定义错误消息填充它。

实现示例

这是一个将验证错误转换为带有基于动态字段的错误的 JSON 响应的实现结构体:

type ApiError struct {
    Field string
    Msg   string
}

func HandleValidationErrors(c *gin.Context, err error) {
    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})
    }
}

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

使用示例

在处理函数中,使用 HandleValidationErrors 处理验证错误:

func UserHandler(c *gin.Context) {
    var u User
    err := c.BindQuery(&u);
    if err != nil {
        HandleValidationErrors(c, err)
        return
    }
    // ...
}
登录后复制

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

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