fix
This commit is contained in:
@@ -3,6 +3,7 @@ package validator
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"tyapi-server/internal/shared/interfaces"
|
||||
|
||||
@@ -14,6 +15,58 @@ import (
|
||||
zh_translations "github.com/go-playground/validator/v10/translations/zh"
|
||||
)
|
||||
|
||||
// 全局变量声明
|
||||
var (
|
||||
globalValidator *validator.Validate
|
||||
globalTranslator ut.Translator
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
// InitGlobalValidator 初始化全局校验器(线程安全)
|
||||
func InitGlobalValidator() {
|
||||
once.Do(func() {
|
||||
// 1. 创建新的校验器实例
|
||||
globalValidator = validator.New()
|
||||
|
||||
// 2. 创建中文翻译器
|
||||
zhLocale := zh.New()
|
||||
uni := ut.New(zhLocale, zhLocale)
|
||||
globalTranslator, _ = uni.GetTranslator("zh")
|
||||
|
||||
// 3. 注册官方中文翻译
|
||||
zh_translations.RegisterDefaultTranslations(globalValidator, globalTranslator)
|
||||
|
||||
// 4. 注册自定义校验规则
|
||||
RegisterCustomValidators(globalValidator)
|
||||
|
||||
// 5. 注册自定义中文翻译
|
||||
RegisterCustomTranslations(globalValidator, globalTranslator)
|
||||
|
||||
// 6. 设置到Gin全局校验器(确保Gin使用我们的校验器)
|
||||
if binding.Validator.Engine() != nil {
|
||||
// 如果Gin已经初始化,则替换其校验器
|
||||
ginValidator := binding.Validator.Engine().(*validator.Validate)
|
||||
*ginValidator = *globalValidator
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// GetGlobalValidator 获取全局校验器实例
|
||||
func GetGlobalValidator() *validator.Validate {
|
||||
if globalValidator == nil {
|
||||
InitGlobalValidator()
|
||||
}
|
||||
return globalValidator
|
||||
}
|
||||
|
||||
// GetGlobalTranslator 获取全局翻译器实例
|
||||
func GetGlobalTranslator() ut.Translator {
|
||||
if globalTranslator == nil {
|
||||
InitGlobalValidator()
|
||||
}
|
||||
return globalTranslator
|
||||
}
|
||||
|
||||
// RequestValidator HTTP请求验证器
|
||||
type RequestValidator struct {
|
||||
response interfaces.ResponseBuilder
|
||||
@@ -23,29 +76,13 @@ type RequestValidator struct {
|
||||
|
||||
// NewRequestValidator 创建HTTP请求验证器
|
||||
func NewRequestValidator(response interfaces.ResponseBuilder) interfaces.RequestValidator {
|
||||
// 创建中文locale
|
||||
zhLocale := zh.New()
|
||||
uni := ut.New(zhLocale, zhLocale)
|
||||
|
||||
// 获取中文翻译器
|
||||
trans, _ := uni.GetTranslator("zh")
|
||||
|
||||
// 获取gin默认的validator实例
|
||||
ginValidator := binding.Validator.Engine().(*validator.Validate)
|
||||
|
||||
// 注册官方中文翻译
|
||||
zh_translations.RegisterDefaultTranslations(ginValidator, trans)
|
||||
|
||||
// 注册自定义验证器到gin的全局validator
|
||||
RegisterCustomValidators(ginValidator)
|
||||
|
||||
// 注册自定义翻译
|
||||
RegisterCustomTranslations(ginValidator, trans)
|
||||
|
||||
// 确保全局校验器已初始化
|
||||
InitGlobalValidator()
|
||||
|
||||
return &RequestValidator{
|
||||
response: response,
|
||||
translator: trans,
|
||||
validator: ginValidator,
|
||||
translator: globalTranslator, // 使用全局翻译器
|
||||
validator: globalValidator, // 使用全局校验器
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user