gin validator中文支持

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")
}

複製代碼
相關文章
相關標籤/搜索