Go语言 如何从Gin中发布的JSON中获取特定参数?

utugiqy6  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(184)

我需要从posted json中获取一个参数。我不想只为这个做结构。这是我曾经尝试过的

type NewTask struct {
    Price uint64 `json:"price"`
}

func (pc TaskController) Create(c *gin.Context) {

    var service Service
    if err := c.BindJSON(&service); err != nil {
        log.Println(err) // this works
    }

    var u NewTask
    if err := c.BindJSON(&u); err != nil {
        log.Println(err) // this return EOF error
    }

    fmt.Println(u.Price)
}

字符串
请求的数据具有许多其他字段,包括 * 价格 *

{
   ...other fields
   price: 30
}


但是这不起作用。我想这是因为我绑定了两次,我怎么能成功绑定多个?
谢啦,谢啦

dxpyg8gm

dxpyg8gm1#

尝试使用ShouldBindJSONBindJSON正在阅读body,所以如果上下文Body被多次读取,我们就在EOF
ShouldBindJSON将请求体存储到上下文中,并在再次调用时重用。

k3fezbri

k3fezbri2#

使用ShouldBindBodyWith多次绑定请求体而不会出现问题。
用途:

var service Service
if err := c.ShouldBindBodyWith(&service, binding.JSON); err != nil {
    log.Println(err) // this works
}

var u NewTask
if err := c.ShouldBindBodyWith(&u, binding.JSON); err != nil {
    log.Println(err) // this will also work
}

字符串

参考号:https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindBodyWith

ShouldBindBodyWithShouldBindWith类似,但它将请求体存储到上下文中,并在再次调用时重用。

注意:此方法在绑定之前读取主体。因此,如果只需要调用一次,应该使用ShouldBindWith来获得更好的performance

相关问题