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!