【问题标题】:Go Gin-Gonic, get text from POST requestGo Gin-Gonic,从 POST 请求中获取文本
【发布时间】:2017-07-04 00:44:56
【问题描述】:

我开始使用 Go 并打包 Gin-Gonic 开发一个 REST API。这个想法是创建一个 REST API,它以 JSON 格式接收 POST 请求并将此调用重定向到另一个应用程序(也是一个 API)。这是代码的和平:

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
    "net/http"
)
func main() {
    r := gin.Default()
    r.GET("/status", func(c *gin.Context) {
        c.String(200, "on")
    })

    r.GET("/user/:name", func(c *gin.Context) {
        name := c.Param("name")
        c.String(http.StatusOK, "Hello %s", name)
    })

    r.GET("/user/:name/:action", func(c *gin.Context) {
        name := c.Param("name")
        action := c.Param("action")
        message := name + " is " + action
        c.String(http.StatusOK, message)
    })

    r.POST("/foo", func(c *gin.Context) {
        fmt.Printf("%s", "At least I got here")
        message := c.PostForm() //???
        c.JSON(200, gin.H{"status": message}) //???
    })
    r.Run(":8080") // listen an
}

在函数 r.Posts("/foo",...) 我希望 c.JSON 将我发送的完整 JSON 发回给我:

curl -H "Content-Type: application/json" -X POST -d '{"user":"xyz","password":"xyz"}' http://localhost:8080/foo

我已经看到了他们通过创建与输入 JSON 具有相同结构的结构来绑定 JSON 文件的示例(查看 https://github.com/gin-gonic/gin 处的 Gin-Gonic 示例)。但是我只需要重新发送完整的字符串而不考虑格式。有什么想法吗?

【问题讨论】:

  • 我最终创建了一个结构并将我的 json 解析为该结构。据我所知,我不能简单地得到任何 JSON。

标签: rest go go-gin


【解决方案1】:

试试这个例子:

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
    "net/http"
)

type LOGIN struct{
    USER string `json:"user" binding:"required"`
    PASSWORD string `json:"password" binding:"required"`
}

func main() {
    r := gin.Default()
    r.GET("/status", func(c *gin.Context) {
        c.String(200, "on")
    })

    r.GET("/user/:name", func(c *gin.Context) {
        name := c.Param("name")
        c.String(http.StatusOK, "Hello %s", name)
    })

    r.GET("/user/:name/:action", func(c *gin.Context) {
        name := c.Param("name")
        action := c.Param("action")
        message := name + " is " + action
        c.String(http.StatusOK, message)
    })

    r.POST("/foo", func(c *gin.Context) {
        var login LOGIN
        c.BindJSON(&login)
        c.JSON(200, gin.H{"status": login.USER}) // Your custom response here
    })
    r.Run(":8080") // listen for incoming connections
}

【讨论】:

  • 这意味着我的 JSON 有一个用户和一个密码文件,它不能是任何 JSON。例如。如果我想要像 {"time":23,"space":"xyz"} 这样的 JSON,则此代码将不起作用。我想接收和发送原始文本。这在 Gin Gonic 中可行吗?
  • 为什么struct的元素总是需要大写开头??
  • @NidhinDavid 因为你希望它们是公开的并且你想解码它们。如果它们是私有的,则 JSON 解码器将无法执行此操作(它们无法访问)
【解决方案2】:

我最终创建了一个结构来解析我的 JSON,然后我进行了一些必要的计算,最后我使用 json.Marshal 将我的 JSON 解析为字符串的数据重新发送。我认为解析 JSON 是有意义的,它是一种检查接收到的信息是否正确的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2016-07-25
    • 2017-08-03
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多