56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
// Package router ...
|
|
//
|
|
// Description : router ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2025-02-07 17:36
|
|
package router
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/go-playground/validator/v10"
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
// GetValidateErr 格式化错误信息
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 22:19 2025/1/15
|
|
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(defaultValidateErrTag); 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"))
|
|
}
|