Golang 的 echo 框架中,接收 Json 数组的问题

新手上路,请多包涵

概述:golang 的 echo 框架,参数是一段 Json 的数组,但会得到错误信息 binding element must be a struct

代码示意如下:

package users

import  (
    "github.com/labstack/echo/v4"
)

type (
    RequestBody struct  {
        Id      int     `json:"id"`
        Name    string  `json:"name"`
        Age     Int     `json:"age"`
    }
}

func Person(c echo.Context) error {
    var user []RequestBody
    
    if err := c.Bind(&user); err != nil {
        return err.Error() // 此处为示意
    }
}

参数 Json 如下:

[
    {
        "id": 1,
        "name": "xiaoming",
        "age": 13
    },
    {
        "id": 2,
        "name": "xiaohong",
        "age": 19
    }
]

执行此代码会得到错误信息:binding element must be a struct

求问,在 echo 框架中,接收 Json 数组,正确的方法应该怎样?

阅读 6.7k
2 个回答

如果传递的数据是form表单形式,用c.Bind是可以的。
单传递Json数据,那请求的 Content-Type 应该是 application/json 吧? 这样的话就不能使用 Bind,而需要接受raw格式的数据流方法,可以用用到 ioutil.ReadAll 去获取数据,获取到Json字符串之后,再去解析成对应的json结构。

参考代码:

func Person(c echo.Context) error {
    var user []RequestBody

    result, err := ioutil.ReadAll(c.Request().Body)
    if err != nil {
        fmt.Println("ioutil.ReadAll err:", err)
        return err
    }

    err = json.Unmarshal(result, &user)
    if err != nil {
        fmt.Println("json.Unmarshal err:", err)
        return err
    }

    fmt.Println("user:", user) // user:[{1 xiaoming 13} {2 xiaohong 19}]
    return nil
}
req := new([]RequestBody)
if err := c.Bind(&req); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, err)
    }

你看行不行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题