gin form validator

原创
07/23 14:31
阅读数 128

validator.go

封装一个统一处理验证消息的文件

package goo

import (
	"fmt"
	"github.com/go-playground/validator"
	"strings"
)

func ValidationMessage(err error, msgs map[string]string) string {
	for _, i := range err.(validator.ValidationErrors) {
		key := fmt.Sprintf("%s_%s", strings.ToLower(i.Field()), strings.ToLower(i.Tag()))
		if msg, ok := msgs[key]; ok {
			return msg
		}

		msg := fmt.Sprintf("%s %s", i.Field(), i.Tag())
		return msg
	}

	return err.Error()
}

address.go

这是一个使用demo

type AddressDelete struct {
	Id int64 `json:"id" binding:"required"`
}

func (this AddressDelete) DoHandle(c *gin.Context) {
	if err := c.ShouldBind(&this); err != nil {
		goo.Exception(40010, goo.ValidationMessage(err, map[string]string{
			"id_required": "ID为空",
		}))
	}

	if err := u_user_address.Delete(this.Id, nil); err != nil {
		goo.Exception(40011, err.Error())
	}

	goo.Success(nil)
}

说明

  • gin框架自带了表单验证,使用的是validator.v8/9/10,
  • 基于此,我们封装了ValidationMessage()方法,统一转换form验证返回信息(因为validator.v8/9/10框架的自带返回信息不够友好)。

message定义规范

map[string]string{
	"{field}_{tag}": "描述信息",
}

示例:

map[string]string{
	"name_required": "名称 必填",
}

参考文档

https://godoc.org/gopkg.in/go-playground/validator.v8
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部