gin form validator

坚强是说给别人听的谎言 提交于 2020-08-07 06:17:18

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!