为了账号安全,请及时绑定邮箱和手机立即绑定

Go gin 获取请求正文 json

Go gin 获取请求正文 json

Go
素胚勾勒不出你 2022-06-06 14:52:28
我使用邮递员发布数据并在正文中放置一些简单的 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()
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

如果只想将请求体 JSON 作为值传递给 Redis,则不需要将 JSON 绑定到值。直接从请求正文中读取原始 JSON 并将其传递:


jsonData, err := ioutil.ReadAll(c.Request.Body)

if err != nil {

    // Handle error

}

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


查看完整回答
反对 回复 2022-06-06
?
largeQ

TA贡献2039条经验 获得超7个赞

或者您可以将GetRawData()函数用作:


jsonData, err := c.GetRawData()


if err != nil{

   //Handle Error

}


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


查看完整回答
反对 回复 2022-06-06
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

让我们举个例子。假设您的请求正文有这样的用户电子邮件:


{ 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)


查看完整回答
反对 回复 2022-06-06
  • 3 回答
  • 0 关注
  • 557 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信