gin底層驗證是基於 validator 包來作的,咱們引入中文包提示中文git
package main
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zh_translations "github.com/go-playground/validator/v10/translations/zh"
"net/http"
)
type RequestBody struct {
User string `form:"user" json:"user" binding:"oneof=haha dada hehe"`
Password string `form:"password" json:"password" binding:"required"`
}
var ValiTrans ut.Translator
var ValiObj *validator.Validate
func transfer() {
ValiObj = validator.New()
english := en.New()
chinese := zh.New()
uni := ut.New(chinese, english)
ValiTrans, _ = uni.GetTranslator("zh")
_ = zh_translations.RegisterDefaultTranslations(ValiObj, ValiTrans)
}
func main() {
r := gin.New()
r.Use(gin.Logger(), gin.Recovery())
transfer()
aServer := r.Group("/a")
{
aServer.POST("/login", func(c *gin.Context) {
requestBody := &RequestBody{}
if err := c.ShouldBindJSON(requestBody); err != nil {
//將 err 轉換爲validator.ValidationErrors類型, 打印信息
for _, errc := range err.(validator.ValidationErrors) {
msg, _ := ValiTrans.T(errc.Tag(), errc.Field(), errc.Param())
c.JSON(http.StatusOK, msg+"\n")
}
return
}
c.JSON(http.StatusOK, "success")
})
}
r.Run(":8888")
}
複製代碼