去Gin-Gonic,从POST请求获取文本

时间:2017-02-15 11:24:04

标签: rest go go-gin

我开始使用 Go 开发 REST API并打包 Gin-Gonic 。我们的想法是创建一个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示例)。但是我只需要重新发送完整的字符串而不需要处理格式。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

试试这个例子:

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}) //???
    })
    r.Run(":8080") // listen an
}

答案 1 :(得分:0)

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