Comments (3)
According to what you said, I processed the code, you can take a look at my code below:
package main
import (
"errors"
"net/http"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
func main() {
g := gin.Default()
g.Use(func(c *gin.Context) {
body, err := c.GetRawData()
if err != nil {
c.Abort()
c.JSON(http.StatusInternalServerError,errors.New("body handling exception"))
} else {
c.Set(gin.BodyBytesKey,body)
}
})
g.POST("/hello", func(c *gin.Context) {
type helloBody struct {
Name string `json:"name"`
}
var body helloBody
err := c.ShouldBindBodyWith(&body,binding.JSON)
if err != nil {
return
}
c.String(200, body.Name)
})
g.Run(":9000")
}
Storing the Body into context negatively affects processing in highly concurrent scenarios and requires you to manually handle the Content-Type yourself.
NOTE: This method reads the body before binding. So you should use ShouldBindWith for better performance if you need to call only once.
It is recommended to use the official default BodyBytesKey, and it is also possible to store your own key in context.
// BodyBytesKey indicates a default body bytes key.
const BodyBytesKey = "_gin-gonic/gin/bodybyteskey"
from gin.
My way forward is to call c.ShouldBindBodyWith(...)
in my middleware and then c.Get(gin.BodyBytesKey) to get the body. Then later in the actual handler function, I use c.ShouldBindBodyWith(...) again to actually use the body.
from gin.
Thanks. I read through the source and that is indeed how I solved the problem.
from gin.
Related Issues (20)
- Transparent decompression for gzip, deflate, etc? HOT 1
- Custom time.Time type can not use bindQuery get a value 2 HOT 4
- http: response.Write on hijacked connection from github.com/gin-gonic/gin.(*responseWriter).Write (response_writer.go:83) HOT 1
- Suggestion: Move Print Debug to Run() functions? HOT 7
- AbortWithStatusJSON doesn't abort context HOT 2
- I translated `tree.go` into java HOT 1
- GetUint and GetUint64 wrong return HOT 1
- Multipart form-data request with empty key for single file upload HOT 2
- gin with golang 1.21, 1.22 DATA RACE
- gin detects `DATA RACE` with Go1.21, Go1.22 HOT 8
- Please consider remove github.com/bytedance/sonic from dependencies HOT 4
- send response from middleware, continue to execute handler chain HOT 3
- StringToBytes is slower than the raw convertion HOT 1
- Bind recursion struct param fatal exit HOT 1
- Warning link doesn't point to anything anymore HOT 1
- verifying github.com/gin-gonic/[email protected]: checksum mismatch, how to fix it? HOT 2
- c.Data and c.DataFromReader overwrite the set header HOT 2
- Vulnerability in golang.org/x/net/http2 version < 0.23.0 HOT 3
- Errors encountered during rendering do not assign the type ErrorTypeRender HOT 2
- [QUESTION] Exclude request method from logger HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gin.