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
来源:oschina
链接:https://my.oschina.net/qiongtaoli/blog/4423517