竹简文档
验证器

概述

xVaild 提供自定义验证器、中文翻译、错误响应处理

验证器

xVaild 基于 go-playground/validator 提供自定义验证器、中文翻译支持和统一错误响应处理。

import xVaild "github.com/bamboo-services/bamboo-base-go/common/validator"

核心功能

字段

类型

自定义验证器

字段

类型

快速使用

初始化验证器

register_engine.go
func (r *Reg) EngineInit() {
    engine := gin.Default()

    // 获取 Gin 的验证器
    if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
        // 注册自定义验证器
        _ = xVaild.RegisterCustomValidators(v)
        // 注册中文翻译器
        _ = xVaild.RegisterTranslator(v)
    }
}

定义请求结构

dto/user.go
type CreateUserRequest struct {
    // 使用 label 标签定义中文字段名
    Username string `json:"username" label:"用户名" binding:"required,min=4,max=20,alphanum_underscore"`
    Password string `json:"password" label:"密码" binding:"required,min=8"`
    Email    string `json:"email" label:"邮箱" binding:"required,email"`
    // 使用枚举验证
    Role     string `json:"role" label:"角色" binding:"required,enum_string=admin user guest"`
    // 使用正则验证
    Phone    string `json:"phone" label:"手机号" binding:"required,regexp=^1[3-9]\\d{9}$"`
}

处理验证错误

handler/user.go
func CreateUser(ctx *gin.Context) {
    var req dto.CreateUserRequest
    if err := ctx.ShouldBindJSON(&req); err != nil {
        // 自动处理验证错误并返回中文响应
        xVaild.HandleValidationError(ctx, err)
        return
    }
    // 业务逻辑...
}

错误响应格式

{
  "context": "abc123",
  "output": "REQUEST_BODY_ERROR",
  "code": 40014,
  "message": "请求体错误",
  "error_message": "用户名格式不正确",
  "data": [
    {
      "field": "username",
      "tag": "alphanum_underscore",
      "message": "用户名只能包含字母、数字和下划线",
      "value": "user@name"
    }
  ]
}

下一步

On this page