第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 ShouldBindJSON() 中使用 struct 的一部分?

如何在 ShouldBindJSON() 中使用 struct 的一部分?

Go
慕哥9229398 2022-10-17 10:24:16
我正在使用帶有 Gin 的 Go 1.17。這是我的結(jié)構(gòu):package modeltype Movie struct {    ID         string `json:"id"`    Year       uint16 `json:"year" binding:"required,lt=3000"`    RentNumber uint32 `json:"rent_number" db:"rent_number" binding:"required,lt=4294967290"`    Title      string `json:"title" binding:"required,max=255"`    Author     string `json:"author" binding:"required,max=80"`    Editor     string `json:"editor" binding:"required,max=125"`    Index      string `json:"index" binding:"required,max=125"`    Bib        string `json:"bib" binding:"required,max=20"`    Ref        string `json:"ref" binding:"required,max=20"`    Cat1       string `json:"cat_1" db:"cat_1" binding:"required,max=20"`    Cat2       string `json:"cat_2" db:"cat_2" binding:"required,max=10"`}我在某個(gè)處理程序中使用此結(jié)構(gòu)時(shí)遇到問題。在這個(gè)處理程序中,我只需要使用我的電影結(jié)構(gòu)中的 2 個(gè)屬性(標(biāo)題和年份)。如果我正在做這樣的事情:func (h *Handler) myHandler(c *gin.Context) {    var movie model.Movie    if err := c.ShouldBindJSON(&movie); err != nil {        c.Error(err)        c.Abort()        return    }    ...它不起作用,因?yàn)樵诖?Web 服務(wù)上我將只發(fā)送 2 個(gè)屬性,并且我將從綁定標(biāo)簽中獲得所需的錯(cuò)誤:{    "title": My title",    "year": 2017}所以我想知道處理這個(gè)問題的“方法”是什么?我可以看到 3 個(gè)解決方案。使用電影結(jié)構(gòu)并忽略除Titleand之外的所有字段Year,但我該怎么做呢??jī)H使用所需字段創(chuàng)建特定結(jié)構(gòu)。在這種情況下,我不會(huì)將此結(jié)構(gòu)放在模型包中,而是放在我的電影 api 包中 type StructForTheSpecialHandler struct {    Year       uint16 `json:"year" binding:"required,lt=3000"`    Title      string `json:"title" binding:"required,max=255"` }像這樣直接在我的處理程序中創(chuàng)建結(jié)構(gòu):func (h *Handler) myHandler(c *gin.Context) {   var tmp struct {       Year  uint16 `json:"year" binding:"required,lt=3000"`       Title string `json:"title" binding:"required,max=255"`   }   if err := c.ShouldBindJSON(&tmp); err != nil {       c.Error(err)       c.Abort()       return   }   ...你能告訴我你是否有更好的解決方案,或者告訴我我的 3 個(gè)解決方案之間的正確方法是什么?
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以直接解組它(完全繞過驗(yàn)證):


err := json.NewDecoder(c.Request.Body).Decode(&movie)

或者您可以嘗試將這些屬性嵌入到結(jié)構(gòu)中:


type EmbeddedMovieFields struct {

   Year  uint16 `json:"year" binding:"required,lt=3000"`

   Title string `json:"title" binding:"required,max=255"`

}


type Movie struct {

    EmbeddedMovieFields

    ID         string `json:"id"`

    RentNumber uint32 `json:"rent_number" db:"rent_number" binding:"required,lt=4294967290"`

    Author     string `json:"author" binding:"required,max=80"`

    Editor     string `json:"editor" binding:"required,max=125"`

    Index      string `json:"index" binding:"required,max=125"`

    Bib        string `json:"bib" binding:"required,max=20"`

    Ref        string `json:"ref" binding:"required,max=20"`

    Cat1       string `json:"cat_1" db:"cat_1" binding:"required,max=20"`

    Cat2       string `json:"cat_2" db:"cat_2" binding:"required,max=10"`

}


var movie model.EmbeddedMovieFields


if err := c.ShouldBindJSON(&movie); err != nil {

    c.Error(err)

    c.Abort()

    return

}


查看完整回答
反對(duì) 回復(fù) 2022-10-17
  • 1 回答
  • 0 關(guān)注
  • 206 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)