目录
- 封装语言包翻译器
- tag中设置验证规则
- 控制层验
- curl请求
- 返回结果
封装语言包翻译器
package validatorimport ("fmt""net/http""reflect""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")func Validate(data interface{}) (string, int) {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), http.StatusUnprocessableEntity}}return "", 0}package validator import ( "fmt" "net/http" "reflect" "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" ) func Validate(data interface{}) (string, int) { 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), http.StatusUnprocessableEntity } } return "", 0 }package validator import ( "fmt" "net/http" "reflect" "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" ) func Validate(data interface{}) (string, int) { 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), http.StatusUnprocessableEntity } } return "", 0 }
tag中设置验证规则
validate:定义验证规则
lable:自定义错误提示
// UserAddress 结构体type UserAddress struct {global.GVA_MODELAddress string `json:"address" form:"address" validate:"required,min=1,max=160" label:"地址" gorm:"column:address;comment:地址;size:1000;default:'';"` //地址State int `json:"state" validate:"required,oneof=1 2" label:"状态 1:显示 2:隐藏"`State2 int `json:"state" form:"state" validate:"required,gt=0" lable:"状态" gorm:"index;column:state;comment:erp状态 1=待销售审核,7=待财务审核;size:10;type:int(11);default:1;"` //状态:ContactPerson string `json:"contactPerson" form:"contactPerson" validate:"required" label:"联系人" gorm:"column:contact_person;comment:联系人;size:255;default:'';"` //联系人Full bool `json:"full" form:"full" validate:"omitempty,oneof=true false" lable:"是否查询全部"`Mobile string `json:"mobile" form:"mobile" validate:"required,min=11" label:"手机号" gorm:"column:mobile;comment:手机号;size:12;default:'';"` //手机号Email string `json:"email" validate:"required,email" label:"邮箱"`ProtocolIds []int `form:"protocolIds[]" search:"-" validate:"omitempty,len=1" label:"协议ids" comment:"协议ids"`ExportType string `form:"exportType" search:"-" validate:"omitempty,oneof=csv xlsx" label:"导出类型 :csv(默认) / xlsx"`ManuId int `json:"manuId" form:"manuId" gorm:"column:manu_id;comment:经销商ID;"`Mark string `json:"mark" form:"mark" gorm:"column:mark;comment:注意;size:1000;default:'';"`global.GVA_DATA_AUTH_MODEL}// UserAddress 结构体 type UserAddress struct { global.GVA_MODEL Address string `json:"address" form:"address" validate:"required,min=1,max=160" label:"地址" gorm:"column:address;comment:地址;size:1000;default:'';"` //地址 State int `json:"state" validate:"required,oneof=1 2" label:"状态 1:显示 2:隐藏"` State2 int `json:"state" form:"state" validate:"required,gt=0" lable:"状态" gorm:"index;column:state;comment:erp状态 1=待销售审核,7=待财务审核;size:10;type:int(11);default:1;"` //状态: ContactPerson string `json:"contactPerson" form:"contactPerson" validate:"required" label:"联系人" gorm:"column:contact_person;comment:联系人;size:255;default:'';"` //联系人 Full bool `json:"full" form:"full" validate:"omitempty,oneof=true false" lable:"是否查询全部"` Mobile string `json:"mobile" form:"mobile" validate:"required,min=11" label:"手机号" gorm:"column:mobile;comment:手机号;size:12;default:'';"` //手机号 Email string `json:"email" validate:"required,email" label:"邮箱"` ProtocolIds []int `form:"protocolIds[]" search:"-" validate:"omitempty,len=1" label:"协议ids" comment:"协议ids"` ExportType string `form:"exportType" search:"-" validate:"omitempty,oneof=csv xlsx" label:"导出类型 :csv(默认) / xlsx"` ManuId int `json:"manuId" form:"manuId" gorm:"column:manu_id;comment:经销商ID;"` Mark string `json:"mark" form:"mark" gorm:"column:mark;comment:注意;size:1000;default:'';"` global.GVA_DATA_AUTH_MODEL }// UserAddress 结构体 type UserAddress struct { global.GVA_MODEL Address string `json:"address" form:"address" validate:"required,min=1,max=160" label:"地址" gorm:"column:address;comment:地址;size:1000;default:'';"` //地址 State int `json:"state" validate:"required,oneof=1 2" label:"状态 1:显示 2:隐藏"` State2 int `json:"state" form:"state" validate:"required,gt=0" lable:"状态" gorm:"index;column:state;comment:erp状态 1=待销售审核,7=待财务审核;size:10;type:int(11);default:1;"` //状态: ContactPerson string `json:"contactPerson" form:"contactPerson" validate:"required" label:"联系人" gorm:"column:contact_person;comment:联系人;size:255;default:'';"` //联系人 Full bool `json:"full" form:"full" validate:"omitempty,oneof=true false" lable:"是否查询全部"` Mobile string `json:"mobile" form:"mobile" validate:"required,min=11" label:"手机号" gorm:"column:mobile;comment:手机号;size:12;default:'';"` //手机号 Email string `json:"email" validate:"required,email" label:"邮箱"` ProtocolIds []int `form:"protocolIds[]" search:"-" validate:"omitempty,len=1" label:"协议ids" comment:"协议ids"` ExportType string `form:"exportType" search:"-" validate:"omitempty,oneof=csv xlsx" label:"导出类型 :csv(默认) / xlsx"` ManuId int `json:"manuId" form:"manuId" gorm:"column:manu_id;comment:经销商ID;"` Mark string `json:"mark" form:"mark" gorm:"column:mark;comment:注意;size:1000;default:'';"` global.GVA_DATA_AUTH_MODEL }
更多验证规则参考手册
https://github.com/go-playground/validator
控制层验
func (userAddressApi *UserAddressApi) CreateDealerUserAddress(c *gin.Context) {userToken, _, e := common.GetContextDealerUser(c)if e != nil {response.FailWithMessage("获取用户信息失败", c)return}var userAddressApi erp.UserAddresserr := c.ShouldBindJSON(&userAddressApi)if err != nil {global.GVA_LOG.Error("参数解析失败!", zap.Error(err))response.FailWithMessage("参数解析失败", c)return}if msg, errCode := validator.Validate(userAddressApi); errCode != 0 {err := fmt.Errorf("参数验证失败!code:%d msg:%s", errCode, msg)global.GVA_LOG.Error(err.Error(), zap.Error(err))response.FailWithMessage(err.Error(), c)return}if err := userAddressService.CreateUserAddress(&userAddressApi, userToken); err != nil {global.GVA_LOG.Error("创建失败!", zap.Error(err))response.FailWithMessage("创建失败", c)} else {response.OkWithDetailed(userAddressApi, "创建成功", c)}}func (userAddressApi *UserAddressApi) CreateDealerUserAddress(c *gin.Context) { userToken, _, e := common.GetContextDealerUser(c) if e != nil { response.FailWithMessage("获取用户信息失败", c) return } var userAddressApi erp.UserAddress err := c.ShouldBindJSON(&userAddressApi) if err != nil { global.GVA_LOG.Error("参数解析失败!", zap.Error(err)) response.FailWithMessage("参数解析失败", c) return } if msg, errCode := validator.Validate(userAddressApi); errCode != 0 { err := fmt.Errorf("参数验证失败!code:%d msg:%s", errCode, msg) global.GVA_LOG.Error(err.Error(), zap.Error(err)) response.FailWithMessage(err.Error(), c) return } if err := userAddressService.CreateUserAddress(&userAddressApi, userToken); err != nil { global.GVA_LOG.Error("创建失败!", zap.Error(err)) response.FailWithMessage("创建失败", c) } else { response.OkWithDetailed(userAddressApi, "创建成功", c) } }func (userAddressApi *UserAddressApi) CreateDealerUserAddress(c *gin.Context) { userToken, _, e := common.GetContextDealerUser(c) if e != nil { response.FailWithMessage("获取用户信息失败", c) return } var userAddressApi erp.UserAddress err := c.ShouldBindJSON(&userAddressApi) if err != nil { global.GVA_LOG.Error("参数解析失败!", zap.Error(err)) response.FailWithMessage("参数解析失败", c) return } if msg, errCode := validator.Validate(userAddressApi); errCode != 0 { err := fmt.Errorf("参数验证失败!code:%d msg:%s", errCode, msg) global.GVA_LOG.Error(err.Error(), zap.Error(err)) response.FailWithMessage(err.Error(), c) return } if err := userAddressService.CreateUserAddress(&userAddressApi, userToken); err != nil { global.GVA_LOG.Error("创建失败!", zap.Error(err)) response.FailWithMessage("创建失败", c) } else { response.OkWithDetailed(userAddressApi, "创建成功", c) } }
curl请求
curl --location --request POST 'http://127.0.0.1:8889/dealerClientErp/createDealerClient' \--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \--header 'Content-Type: application/json' \--header 'Accept: */*' \--header 'Host: 127.0.0.1:8889' \--header 'Connection: keep-alive' \--data-raw '{"username": "haima1","mobile": "","clientType": 3,"mark": "this is test"}'curl --location --request POST 'http://127.0.0.1:8889/dealerClientErp/createDealerClient' \ --header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \ --header 'Content-Type: application/json' \ --header 'Accept: */*' \ --header 'Host: 127.0.0.1:8889' \ --header 'Connection: keep-alive' \ --data-raw '{ "username": "haima1", "mobile": "", "clientType": 3, "mark": "this is test" }'curl --location --request POST 'http://127.0.0.1:8889/dealerClientErp/createDealerClient' \ --header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \ --header 'Content-Type: application/json' \ --header 'Accept: */*' \ --header 'Host: 127.0.0.1:8889' \ --header 'Connection: keep-alive' \ --data-raw '{ "username": "haima1", "mobile": "", "clientType": 3, "mark": "this is test" }'
返回结果
{"code": 7,"data": {},"msg": "参数验证失败!code:422 msg:手机号为必填字段"}{ "code": 7, "data": {}, "msg": "参数验证失败!code:422 msg:手机号为必填字段" }{ "code": 7, "data": {}, "msg": "参数验证失败!code:422 msg:手机号为必填字段" }
参考文章:
https://www.liwenzhou.com/posts/Go/validator-usages/#c-1-0-2
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
- 最新
- 最热
只看作者