亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang Gin 綁定請求正文 XML 到切片

Golang Gin 綁定請求正文 XML 到切片

Go
慕尼黑8549860 2023-03-07 14:34:04
我對 Gin 中的默認綁定有疑問。我有一個傳入請求,其中主體是多個 Entity 對象,如下所示:<Entity>  <Name>Name One here</Name>  ...</Entity><Entity>  <Name>Name Two here</Name>  ...</Entity>我的目標是將它映射到相應的切片。所以所需對象的結構是這樣的:type Entity struct {  XMLName xml.Name `bson:"-" json:"-" xml:"Entity"`  Name   string    `bson:"name,omitempty" json:",omitempty" xml:",omitempty"`  ...}我遇到的問題是,無論在請求正文中傳遞了多少對象,都只有一個提供的對象被映射到切片中。請注意,請求的 JSON 版本可以正確解析。[ {   Name: "Name One",   ... }, {   Name: "Name Two",   ... }]我有一個模型請求結構的結構type ApplicationRequest struct {  XMLName      xml.Name `bson:"-" xml:"Entities"`  Entities     []Entity `binding:"required" xml:"Entity"`  ParameterOne bool  ...}所以現在在控制器函數中,我像這樣處理綁定:func RequestHandler() gin.HandlerFunc {  return func(c *gin.Context) {    var request ApplicationRequest    if err := c.Bind(&request.Entities); err != nil {        responseFunction(http.StatusBadRequest, ..., Message: err.Error()})        return    }    // At this point, the request.Entities slice has ONE element, never more than one  }}請注意,我正在使用 gin context.Bind(...) 函數,因為它隱式處理 JSON 或 XML 的解析,并且適用于我需要的所有其他場景。希望這提供了足夠的上下文,任何幫助將不勝感激!謝謝!
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

這不是杜松子酒問題: unmarshal-xml-array-in-golang-only-getting-the-first-element

以下是兩種處理方法:

  • 添加一個根節點就像@zangw

  • 通過'for'更改綁定方法 github.com\gin-gonic\[email protected]\binding\xml.go line 28 func decodeXML

func decodeXML(r io.Reader, obj any) error {

    decoder := xml.NewDecoder(r)

    if err := decoder.Decode(obj); err != nil {

        return err

    }

    return validate(obj)

}


func decodeXML(r io.Reader, obj any) error {

    decoder := xml.NewDecoder(r)

    for  {

        if err := decoder.Decode(obj); err != nil {

            if err == io.EOF{

                break

            }

            return err

        }

    }

    return validate(obj)

}


查看完整回答
反對 回復 2023-03-07
  • 1 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號