type
LoginForm
struct
{
User
string
`form:"user" binding:"required"`
Password
string
`form:"password" binding:"required"`
func
Login
(c *gin.Context)
{
var
form LoginForm
if
err := c.ShouldBindJSON(&form); err !=
nil
{
c.JSON(
400
, gin.H{
"message"
: err.Error()})
return
"message": "Key: 'LoginForm.User' Error:Field validation for 'User' failed on the 'required' tag\nKey: 'LoginForm.Password' Error:Field validation for 'Password' failed on the 'required' tag"
定义验证器接口 Validator
package request
import "github.com/go-playground/validator/v10"
type Validator interface {
GetMessage() ValidatorMessages
type ValidatorMessages map[string]string
func GetErrorMsg(request Validator, err error) string {
for _, v := range err.(validator.ValidationErrors) {
if message, exist := request.GetMessages()[v.Field() + "." + v.Tag()]; exist {
return message
return v.Error()
return "Parameter error"
表单结构体 LoginForm
实现验证器接口 Validator
package request
type LoginForm struct {
User string `form:"user" binding:"required"`
Password string `form:"password" binding:"required"`
func (loginForm LoginForm) GetMessages() ValidatorMessages {
return ValidatorMessages{
"User.required": "请输入用户名",
"Password.required": "请输入密码",
func Login(c *gin.Context) {
var form request.LoginForm
if err := c.ShouldBindJSON(&form); err != nil {
c.JSON(400, gin.H{"message": request.GetErrorMsg(form, err)})
return
"message": "请输入用户名"
复制代码