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

Go语言中如何验证HTTP POST请求,拒绝含额外属性的请求?

解决Go中JSON解码时拒绝未知字段的问题

要拒绝包含结构体定义外额外属性的HTTP POST请求,只需给json.Decoder添加DisallowUnknownFields()配置,这样解码遇到未定义字段时就会直接返回错误。

修改后的代码示例

type RestPermissionDataV2 struct {
    // required:true
    Method string `json:"method" validate:"required"`
    // required:true
    Path string `json:"path" validate:"required"`
}

var permData RestPermissionDataV2

dec := json.NewDecoder(r.Body)
// 关键配置:拒绝未知字段
dec.DisallowUnknownFields()
if err := dec.Decode(&permData); err != nil {
    // 返回错误,比如400 Bad Request
    http.Error(w, "请求包含无效字段: "+err.Error(), http.StatusBadRequest)
    return
}

// 继续执行原有必填字段的验证
validate := validator.New()
if err := validate.Struct(permData); err != nil {
    http.Error(w, "字段验证失败: "+err.Error(), http.StatusBadRequest)
    return
}

原理说明

  • 默认情况下,Go的json.Decoder会忽略结构体中未定义的JSON字段,不会触发错误。
  • DisallowUnknownFields()方法会改变这个行为,当解码时遇到结构体没有对应字段的JSON键值对,就会返回json: unknown field "a"这类错误,此时你可以直接返回HTTP 400错误给客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:22:12