gin框架 validate数据验证规则 并打印中文报错信息 非常方便

一、使用validate根据需求需要稍做调整

gin框架有自己的验证包,我们也可以用第三方的验证包,因为gin本身错误信息是英文的,而且是全部打印出来,不符合前端需求,所以需要做下调整

二、需要下载的包

在当前项目的命令处下载第三方库,用go get下载,比如

	go get "github.com/go-playground/locales/zh_Hans_CN"

下载这些库,并在Validator.go中import引用

    "github.com/go-playground/locales/zh_Hans_CN"
    "github.com/go-playground/universal-translator"
    "github.com/go-playground/validator/v10"
    "github.com/go-playground/validator/v10/translations/zh"

 三、基于mvc思路,写基本框架

        写controller、model、utils,view用于网页端 暂时不需要,这样方便后期修改和二次开发,比如controller的User.go要调用model的Order.go,直接调用model.order就可以,这样不至于混乱

        controller:控制层,写一切请求和逻辑判断都放这儿

        model:模板层,struct类型和连接数据库都放这儿

        utils:万能方法、函数,比如返回指定时间日期、数据验证、上传、下载、短信、返回信息等

四、截图流程

main.go 入口

package main

import (
    "gin/app/controller"
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    // 注册路由
    r.POST("/login", controller.Login)
    // 启动HTTP服务器
    r.Run()
}

控制层controller的User.go

package controller

import (
    "gin/app/model"
    "gin/app/utils"
    "github.com/gin-gonic/gin"
    "net/http"
)

// 用户登录
func Login(c *gin.Context) {

    var data model.User

    //接收请求参数
    _ = c.ShouldBindJSON(&data)

    //验证数据并返回结果
    msg, code := utils.Validate(&data)

    //验证报错,返回错误信息给前端
    if code != 200 {
       c.JSON(http.StatusOK, gin.H{
          "code": code,
          "data": "",
          "msg":  msg,
       })
       return
    }

}

 模型层model的User.go

package model

// 表单数据 需要tag参数
type User struct {
    UserName string `json:"username" validate:"required,min=4,max=12" label:"用户名"`
    PassWord string `json:"password" validate:"required,min=6,max=20" label:"密码"`
    Phone    string `json:"phone" validate:"required,phone" label:"手机号"`
    Email    string `json:"email" validate:"required,email" label:"邮箱"`
    Address  string `json:"address"`
}

万能工具Utils的数据验证Validator.go

package utils

import (
    "fmt"
    "github.com/go-playground/locales/zh_Hans_CN"
    unTrans "github.com/go-playground/universal-translator"
    "github.com/go-playground/validator/v10"
    zhTrans "github.com/go-playground/validator/v10/translations/zh"
    "reflect"
)

func Validate(data interface{}) (string, int) {
    //验证对象 并将英文报错转换成中文报错(message)
    validate := validator.New()
    uni := unTrans.New(zh_Hans_CN.New())
    trans, _ := uni.GetTranslator("zh_Hans_CN")
    err := zhTrans.RegisterDefaultTranslations(validate, trans)
    if err != nil {
       fmt.Println("err:", err)
    }
    //将验证法字段名 映射为中文名
    validate.RegisterTagNameFunc(func(field reflect.StructField) string {
       label := field.Tag.Get("label")
       return label
    })
    err = validate.Struct(data)
    if err != nil {
       //错误可能有多个 遍历 返回一个
       for _, v := range err.(validator.ValidationErrors) {
          return v.Translate(trans), 400
       }
    }
    return "", 200
}

完成后,直接go run main.go运行,返回结果如下

花费1小时写的,记得点赞收藏哈,Thanks♪(・ω・)ノ!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值