完成基础版本基于运行时的动态结构体生成 + 参数验证
This commit is contained in:
55
format.go
Normal file
55
format.go
Normal file
@ -0,0 +1,55 @@
|
||||
// Package validate ...
|
||||
//
|
||||
// Description : validate ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2025-03-19 15:50
|
||||
package validate
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GetValidateErr 格式化验证结果错误信息
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 15:51 2025/3/19
|
||||
func GetValidateErr(obj any, rawErr error) error {
|
||||
if nil == rawErr {
|
||||
return nil
|
||||
}
|
||||
if nil == obj {
|
||||
return rawErr
|
||||
}
|
||||
var (
|
||||
ok bool
|
||||
validationErrs validator.ValidationErrors
|
||||
errString []string
|
||||
field reflect.StructField
|
||||
)
|
||||
if ok = errors.As(rawErr, &validationErrs); !ok {
|
||||
return rawErr
|
||||
}
|
||||
objType := reflect.TypeOf(obj)
|
||||
if objType.Kind() == reflect.Ptr {
|
||||
objType = objType.Elem()
|
||||
}
|
||||
for _, validationErr := range validationErrs {
|
||||
if field, ok = objType.FieldByName(validationErr.Field()); ok {
|
||||
if e := field.Tag.Get(TagErrMsg); e != "" {
|
||||
errString = append(errString, fmt.Sprintf("%s: %s", field.Tag.Get("json"), e))
|
||||
continue
|
||||
} else {
|
||||
errString = append(errString, fmt.Sprintf("%s: %v", field.Tag.Get("json"), validationErr.Value()))
|
||||
}
|
||||
}
|
||||
errString = append(errString, validationErr.Error())
|
||||
}
|
||||
return errors.New(strings.Join(errString, "\n"))
|
||||
}
|
||||
Reference in New Issue
Block a user