| | package common |
| |
|
| | import ( |
| | "bytes" |
| | "encoding/json" |
| | "github.com/gin-gonic/gin" |
| | "io" |
| | "strings" |
| | ) |
| |
|
| | const KeyRequestBody = "key_request_body" |
| |
|
| | func GetRequestBody(c *gin.Context) ([]byte, error) { |
| | requestBody, _ := c.Get(KeyRequestBody) |
| | if requestBody != nil { |
| | return requestBody.([]byte), nil |
| | } |
| | requestBody, err := io.ReadAll(c.Request.Body) |
| | if err != nil { |
| | return nil, err |
| | } |
| | _ = c.Request.Body.Close() |
| | c.Set(KeyRequestBody, requestBody) |
| | return requestBody.([]byte), nil |
| | } |
| |
|
| | func UnmarshalBodyReusable(c *gin.Context, v any) error { |
| | requestBody, err := GetRequestBody(c) |
| | if err != nil { |
| | return err |
| | } |
| | contentType := c.Request.Header.Get("Content-Type") |
| | if strings.HasPrefix(contentType, "application/json") { |
| | err = json.Unmarshal(requestBody, &v) |
| | } else { |
| | |
| | |
| | } |
| | if err != nil { |
| | return err |
| | } |
| | |
| | c.Request.Body = io.NopCloser(bytes.NewBuffer(requestBody)) |
| | return nil |
| | } |
| |
|