猿问

Go gin 获取请求正文 json

我使用邮递员发布数据并在正文中放置一些简单的 json


请求正文


{

    "order":"1",

    "Name":"ts1"

}

我需要将数据传输到 json 并尝试如下操作,但我无法获取 json,不知道缺少什么


router.POST("/user", func(c *gin.Context) {

        var f interface{}

        //value, _ := c.Request.GetBody()

        //fmt.Print(value)


        err2 := c.ShouldBindJSON(&f)

        if err2 == nil {

            err = client.Set("id", f, 0).Err()

            if err != nil {

                panic(err)

            }


        }

f 不是 json 并且我收到错误,知道如何使它工作吗?错误是:


redis: can't marshal map[string]interface {} (implement encoding.BinaryMarshaler)

我使用https://github.com/go-redis/redis#quickstart


如果我删除主体并使用这样的硬编码代码,我可以设置数据,它可以工作


json, err := json.Marshal(Orders{

    order:   "1",

    Name: "tst",

})


client.Set("id", json, 0).Err()


素胚勾勒不出你
浏览 558回答 3
3回答

qq_遁去的一_1

如果只想将请求体 JSON 作为值传递给 Redis,则不需要将 JSON 绑定到值。直接从请求正文中读取原始 JSON 并将其传递:jsonData, err := ioutil.ReadAll(c.Request.Body)if err != nil {    // Handle error}err = client.Set("id", jsonData, 0).Err()

largeQ

或者您可以将GetRawData()函数用作:jsonData, err := c.GetRawData()if err != nil{   //Handle Error}err = client.Set("id", jsonData, 0).Err()

犯罪嫌疑人X

让我们举个例子。假设您的请求正文有这样的用户电子邮件:{ email: "test@test.com" }现在你想在 bakend 上收到这封电子邮件。首先定义如下结构:    type EmailRequestBody struct {    Email string    }现在您可以轻松地将请求正文中的电子邮件值绑定到您定义的结构,如下所示:首先为您的结构定义一个变量,如下所示,然后绑定该值:func ExampleFunction(c *gin.Context) {var requestBody EmailRequestBody   if err := c.BindJSON(&requestBody); err != nil {       // DO SOMETHING WITH THE ERROR   }  fmt.Println(requestBody.Email)}您可以轻松访问电子邮件值并将其打印出来或做任何您需要的事情:fmt.Println(requestBody.Email)让我们举个例子。假设您的请求正文有这样的用户电子邮件:{ email: "test@test.com" }现在你想在 bakend 上收到这封电子邮件。首先定义如下结构:    type EmailRequestBody struct {    Email string    }现在您可以轻松地将请求正文中的电子邮件值绑定到您定义的结构,如下所示:首先为您的结构定义一个变量,如下所示,然后绑定该值:func ExampleFunction(c *gin.Context) {var requestBody EmailRequestBody   if err := c.BindJSON(&requestBody); err != nil {       // DO SOMETHING WITH THE ERROR   }  fmt.Println(requestBody.Email)}您可以轻松访问电子邮件值并将其打印出来或做任何您需要的事情:fmt.Println(requestBody.Email)
随时随地看视频慕课网APP

相关分类

Go
我要回答