从结构标记验证返回自定义错误消息

互联网 行业动态 更新时间:2024-06-13 00:19:20

bla*_*een 5

Gin gonic 使用该包github./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固定结构模型来代替。

更多推荐

自定义,标记,错误,消息,结构

本文发布于:2023-04-21 03:48:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/a7024f4a82388a91b314aa0351630ed4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   标记   错误   消息   结构

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!