在进行web开发时,处理Http请求是非常常见的任务。对于Go语言开发者来说,Gin框架是一个非常受欢迎的选择。然而,有时候我们需要多次读取请求正文,以进行一些特定的处理。那么,在Go
在进行web开发时,处理Http请求是非常常见的任务。对于Go语言开发者来说,Gin框架是一个非常受欢迎的选择。然而,有时候我们需要多次读取请求正文,以进行一些特定的处理。那么,在Go-Gin中如何实现多次读取请求正文呢?在本文中,PHP小编小新将为大家详细介绍这个问题的解决方案,帮助开发者更好地应对这一需求。
我正在尝试在对其数据执行验证后恢复其数据的上下文。我需要数据在下一个函数中根据需要继续移动。
我是 golang 新手,下面的代码是我所能做到的。非常感谢任何帮助和更好的方法。
提前致谢。
验证中间件
func SignupValidator(c *gin.Context) {
// Read the Body content
// var bodyBytes []byte
// if c.Request.Body != nil {
// bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
// }
var user entity.User
if err := c.ShouldBindJSON(&user); err != nil {
validate := validator.New()
if err := validate.Struct(&user); err != nil {
c.jsON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
c.Abort()
return
}
// c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
}
// Read the Body content
var bodyBytes []byte
if c.Request.Body != nil {
bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
}
fmt.Println(string(bodyBytes)) // this empty
c.Next()
}
路线
auth.POST("login", gin.Logger(), validations.SignupValidator, func(ctx *gin.Context) {
ctx.JSON(200, videoController.Save(ctx))
})
这是一个使用 ShouldBindBodyWith
读取正文两次的示例,检查一下:
package main
import (
"log"
"net/http"
"GitHub.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
type ParamsOne struct {
Username string `json:"username"`
}
type ParamsTwo struct {
Username string `json:"username"`
}
func main() {
r := gin.New()
r.POST("/", func(c *gin.Context) {
var f ParamsOne
// Read ones
if err := c.ShouldBindBodyWith(&f, binding.JSON); err != nil {
log.Printf("%+v", err)
}
log.Printf("%+v", f)
var ff ParamsTwo
if err := c.ShouldBindBodyWith(&ff, binding.JSON); err != nil {
log.Printf("%+v", err)
}
log.Printf("%+v", ff)
c.IndentedJSON(http.StatusOK, f)
})
r.Run(":4000")
}
输出:
$example: ./example
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] POST / --> main.main.func1 (1 handlers)
[GIN-debug] Listening and serving HTTP on :4000
2020/07/05 10:47:03 {Username:somename}
2020/07/05 10:47:03 {Username:somename}
以上就是Go-Gin 多次读取请求正文的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: Go-Gin 多次读取请求正文
本文链接: https://www.lsjlt.com/news/562358.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0