英文:
Go Gin-Gonic, get text from POST request
问题
我正在开发一个使用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 and serve on 0.0.0.0:8080
}
在r.POST("/foo",...)
函数中,我希望c.JSON
将我发送的完整JSON返回给我:
curl -H "Content-Type: application/json" -X POST -d '{"user":"xyz","password":"xyz"}' http://localhost:8080/foo
我看过一些示例,它们通过创建一个与输入JSON具有相同结构的结构体来绑定JSON文件(请参阅Gin-Gonic的示例https://github.com/gin-gonic/gin)。然而,我只需要重新发送完整的字符串,而不必关心格式。有什么想法吗?
英文:
I'm starting to develop a REST API using Go and package Gin-Gonic. The idea is to create a REST API that receives POST requests in a JSON format and redirects this call to another application (also a API). Here is a piece of code:
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
}
At function r.Posts("/foo",...)
I would like c.JSON
to send me back the full JSON that I sent:
curl -H "Content-Type: application/json" -X POST -d '{"user":"xyz","password":"xyz"}' http://localhost:8080/foo
I've seen examples where they bind the JSON file by creating a struct with the same structure as the input JSON (check Gin-Gonic examples at https://github.com/gin-gonic/gin ). However I only need to resend the full string without taking care of the format. Any ideas?
答案1
得分: 19
请尝试以下示例:
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") // 监听传入的连接
}
希望对你有帮助!
英文:
Try this example:
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
}
答案2
得分: -1
我最终创建了一个结构体来解析我的JSON,然后进行了一些必要的计算,最后我使用json.Marshal将解析后的数据重新发送为字符串形式。我认为解析JSON是有意义的,这是一种检查接收到的信息是否正确的方式。
英文:
I ended up creating a struct to parse my JSON, then I make some required calculations and finally I resend the data parsing my JSON to string using json.Marshal. I think it makes sense to parse the JSON, it is a way to check whether the info received is correct.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论