You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang Gin中binding:"required,dive"验证不生效问题

问题分析与解决

当前问题出在Messages数组内的Text字段未添加必填验证标签,导致Gin绑定器在JSON缺失text字段时,仅会将Text初始化为零值结构体,不会触发校验错误。

解决方案

给Text字段添加binding:"required"标签;如果需要确保Body字段也为必填项,同时给Body加上binding:"required":

type TextMessage struct {
    Contacts []struct {
        Profile struct {
            Name string `json:"name"`
        } `json:"profile"`
        WaID string `json:"wa_id"`
    } `json:"contacts" binding:"required,dive"`
    Messages []struct {
        From      string `json:"from"`
        ID        string `json:"id"`
        Timestamp string `json:"timestamp"`
        Text      struct {
            Body string `json:"body" binding:"required"` // 若Body必填则添加该标签
        } `json:"text" binding:"required"` // 核心:添加required标签触发校验
        Type string `json:"type"`
    } `json:"messages" binding:"required,dive"`
}

原理说明

Gin的binding.JSON校验规则逻辑:

  • 无required标签的字段,JSON中缺失时会自动用零值填充,不判定为错误
  • 带有required标签的字段,JSON中必须存在对应键值,否则绑定过程会返回校验错误

修改后,当传入的JSON不含text字段时,c.ShouldBindBodyWith会返回非nil错误,符合预期的校验逻辑。

内容的提问来源于stack exchange,提问作者GurbaniX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:32:48