c.BindJSON带有可选参数

aaj*_*aaj 6 rest go

我正在使用go-gin并尝试实现PATCH API.3个字段是可编辑的,所以我有一个像这样定义的结构

type Person struct {
    Name         string  `form:"name" json:"name" binding:"required"`
    Account      string  `form:"account" json:"account" binding:"required"`
    PrimaryOwner string  `form:"primary_owner" json:"primary_owner" binding:"required"`
}
Run Code Online (Sandbox Code Playgroud)

我试图像这样绑定json:

var json Person
if c.BindJSON(&json) == nil {
        fmt.Println("json matched!!!!!!!")
    }else {
        fmt.Println("json not matched!!!!!!!")
}
Run Code Online (Sandbox Code Playgroud)

问题是它试图绑定所有参数.如果我给出所有参数它会匹配,但即使缺少一个参数,它也会进入else块.在补丁API中我不想强制绑定.如果我binding:"required"从所有字段中删除它总是匹配,即使我给了一些关键字sdfsdfsdf.如何绑定所有参数但不能全部绑定.应验证json请求体中的密钥,但不应同时需要所有密钥.

apx*_*pxp 4

刚刚发现这个问题没有答案。

所以你想绑定所有参数并且需要最少一个

如何绑定所有参数但不是全部绑定在一起。

你几乎在这里回答了你的问题:

如果我从所有字段中删除绑定:“required”,它总是匹配

所以我会删除所需的值并检查每个值。

var json Person
if err := c.BindJSON(&json); err != nil {
        // error handling here
        // something went wrong
    }
    if json.Name == "" && json.Account == "" && json.PrimaryOwner  == "" {
        // no key is given... 
    }
}
Run Code Online (Sandbox Code Playgroud)