添加全局验证器,优化白名单创建请求的参数验证
This commit is contained in:
55
web/globals/validator.go
Normal file
55
web/globals/validator.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package globals
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/go-playground/locales/zh"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
zhtrans "github.com/go-playground/validator/v10/translations/zh"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
var Validator *ValidatorHolder
|
||||
|
||||
type ValidatorHolder struct {
|
||||
validator *validator.Validate
|
||||
translator ut.Translator
|
||||
}
|
||||
|
||||
func (v *ValidatorHolder) Validate(c *fiber.Ctx, data any) error {
|
||||
|
||||
if err := c.BodyParser(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if errs := v.validator.Struct(data); errs != nil {
|
||||
var sb = strings.Builder{}
|
||||
var typeErrs validator.ValidationErrors
|
||||
errors.As(errs, &typeErrs)
|
||||
for i, err := range typeErrs {
|
||||
sb.WriteString(err.Translate(v.translator))
|
||||
if i < len(typeErrs)-1 {
|
||||
sb.WriteString("\n")
|
||||
}
|
||||
}
|
||||
return fiber.NewError(fiber.StatusBadRequest, sb.String())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func InitValidator() {
|
||||
var validate = validator.New(validator.WithRequiredStructEnabled())
|
||||
|
||||
var translator = ut.New(zh.New()).GetFallback()
|
||||
err := zhtrans.RegisterDefaultTranslations(validate, translator)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
Validator = &ValidatorHolder{
|
||||
validator: validate,
|
||||
translator: translator,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user