您的位置 首页 > 腾讯云社区

gin框架之表单验证---大话swift

实践经验告诉我们,前端提交过来的一切数据都可以信任,都必须做校验。所以我们必须要进行数据校验!那么在gin框架中怎么做校验的呢!gin默认使用的是validator库,有兴趣的小伙伴可以去自己看一下文档,github地址是:https://github.com/go-playground/validator

gin框架为我们整合和一些基础的模型绑定和数据校验,比如:

ShouldBindShouldBindQueryShouldBindUriShouldBindJSONShouldBindHeaderShouldBindYAML等等

但是,有的时候我们需要自己定义校验规则,我们就需要紫荆定义校验方法

func mobile(fl validator.FieldLevel) bool { ok, _ := regexp.MatchString(`^1[3-9][0-9]{9}$`, fl.Field().String()) return ok }

然后注册进来

v.validate.RegisterTagNameFunc(func(field reflect.StructField) string { return field.Tag.Get("json") }) _ = v.validate.RegisterValidation("mobile", mobile)

我尝试了github上提供的国际化方案,觉得不是很理想,自定义了错误翻译方法

//翻译错误信息 func TranslateOverride(err error, msgMap map[string]string) map[string]string { var errMap = map[string]string{} if err != nil { errs := err.(validator.ValidationErrors) for _, e := range errs { // can translate each error one at a time. key := fmt.Sprintf("%v.%v", e.Field(), e.Tag()) if _, ok := msgMap[key]; ok { if e.Param() != "" { errMap[key] = strings.Replace(msgMap[key], "{"+e.Tag()+"}", e.Param(), -1) } else { errMap[key] = msgMap[key] } } else { errMap[key] = key + "未定义翻译字段" } } } return errMap }

自定义错误信息

var ( MsgMap = map[string]string{} ) func init() { MsgMap["Name.required"] = "用户名不可以为空" MsgMap["Name.min"] = "用户名长度大于{min}位" MsgMap["Name.max"] = "用户名长度小于{max}位" MsgMap["Password.required"] = "密码不可以为空" MsgMap["Password.min"] = "密码长度大于{min}位" MsgMap["Password.max"] = "密码长度小于{max}位" MsgMap["Age.gt"] = "年龄必须大于{gt}" MsgMap["Mobile.required"] = "手机号不可以为空" MsgMap["Mobile.mobile"] = "手机号格式不符合要求" }

执行

binding.Validator = new(defaultValidator) router := gin.Default() router.GET("/", func(context *gin.Context) { var user User if err := context.ShouldBindQuery(&user); err == nil { fmt.Println(user) } else { e := TranslateOverride(err, MsgMap) fmt.Println(e) } }) router.Run()

访问地址

http://127.0.0.1:8080/?name=111&mobile=157013088

控制台输出自定义翻译信息

map[Age.gt:年龄必须大于4 Mobile.mobile:手机号格式不符合要求 Name.min:用户名长度大于4位 Password.required:密码不可以为空]

需要国际化的小伙伴可自己尝试着修改一下

链接:https://pan.baidu.com/share/init?surl=0XaLqgwUOV_Lk366FwpRwA 提取码:j5yp

---来自腾讯云社区的---大话swift

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: