Home >Backend Development >Golang >How Can I Customize Error Messages for Struct Tag Validation in Gin?

How Can I Customize Error Messages for Struct Tag Validation in Gin?

Susan Sarandon
Susan SarandonOriginal
2024-12-23 13:40:33878browse

How Can I Customize Error Messages for Struct Tag Validation in Gin?

Custom Error Message Formatting for Struct Tag Validation in Gin

When performing struct validation in Gin, the default error message returned is verbose and lacks user-friendliness. This article provides a solution to customize the error message and present it in a more manageable format.

Using the go-playground/validator/v10 package, Gin establishes validation through struct tags. When validation fails, the error returned is a validator.ValidationErrors type. To extract specific error information, one can utilize the standard errors package.

Assuming a custom error model as follows:

type ApiError struct {
    Field string
    Msg   string
}

The following code snippet demonstrates how to customize the error message:

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
}

A helper function, msgForTag, can be defined to provide custom error messages based on the validation tag:

func msgForTag(tag string) string {
    switch tag {
    case "required":
        return "This field is required"
    case "email":
        return "Invalid email"
    }
    return ""
}

This approach allows for more user-friendly error formatting, making it easier to communicate validation errors to the end-user.

The above is the detailed content of How Can I Customize Error Messages for Struct Tag Validation in Gin?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn