我正在使用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"`
}
我试图像这样绑定json:
var json Person
if c.BindJSON(&json) == nil {
fmt.Println("json matched!!!!!!!")
}else {
fmt.Println("json not matched!!!!!!!")
}
问题是它试图绑定所有参数。如果我给出所有参数它会匹配,但即使缺少一个参数,它也会进入else块。在补丁API中我不想强制绑定。如果我从所有字段中删除binding:"required"
,它总是匹配,即使我提供了一些像sdfsdfsdf
这样的密钥。如何绑定所有参数但不能全部绑定。应验证json请求体中的密钥,但不应同时需要所有密钥。
答案 0 :(得分:0)
只是发现这个问题没有得到答案。
因此,您想绑定所有参数,并且最少需要一个
如何绑定到所有参数,但不能绑定到所有参数。
您几乎在这里回答了您的问题:
如果我从始终匹配的所有字段中删除绑定:“ 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...
}
}