gin 自定义绑定器以及错误信息
type Astudent struct {
    StuName     string `json:"name" binding:"required" msg:"学生姓名错误"`
    StuNumber   int    `json:"number" binding:"required" msg:"学号校验失败"`
    //自定义绑定器 class
    StuClass    string `json:"class" binding:"required,class" msg:"请使用培优系统"`
}
class是自定义的绑定器,msg是自定义的错误信息。以下是class绑定器:
func class(c validator.FieldLevel) bool {
    class := c.Field().Interface().(string)
    classStr := strings.Contains(class, "splendid")
    if classStr {
        return false
    }
    return true
}
class将判断传回的Stuclass值是否包含splendid字符串,如果包含那么返回false
重写ShouldBind
import (
	"errors"
	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
	"reflect"
)
type Api struct {
	Context   *gin.Context
	Success   bool   `json:"success"`
	Code      int    `json:"code"`
	Data      any    `json:"data"`
	Message   string `json:"message"`
	Timestamp int64  `json:"timestamp"`
}
func (e *Api) ShouldBindJSON(c *gin.Context, data any) error {
	//绑定json到结构体
	err := c.ShouldBindJSON(data)
	if err != nil {
		getObj := reflect.TypeOf(data)
		//将err断言为validator.ValidationErrors类型
		if errs, ok := err.(validator.ValidationErrors); ok {
			for _, er := range errs {
				if f, exist := getObj.Elem().FieldByName(er.Field()); exist {
					msg := f.Tag.Get("msg")
					return errors.New(msg)
				}
			}
		}
	}
	return nil
}
在post请求中处理自定义错误信息:
type Portrait struct {
	api.Api
}
func (e Portrait) GenerateCompanyPortrait(c *gin.Context) {
	var req Astudent
	if err := e.ShouldBindJSON(c, &req); err != nil {
		e.MakeContext(c).Wrong("数据验证失败," + err.Error())
		return
	}
	srv := server.Portrait{}
	companyPortrait, err := srv.GenerateCompanyPortrait(req)
	if err != nil {
		e.MakeContext(c).Wrong("生成失败," + err.Error())
		return
	}
	e.MakeContext(c).OK(companyPortrait)
}
可以将msg提示的错误信息打印。

 
        
