package handler import ( "encoding/json" "github.com/gin-gonic/gin" ) // bindJson bind body as a map func bindJson(c *gin.Context) map[string]interface{} { var jsonMap map[string]interface{} err := c.ShouldBindJSON(&jsonMap) if err != nil { var requestBody []byte _, err := c.Request.Body.Read(requestBody) if err != nil { panic(err) } RequestErr(c, requestBody) return nil } if jsonMap == nil || len(jsonMap) == 0 { RequestErr(c, map[string]interface{}{"Body": nil}) return nil } return jsonMap } // bindJsonStruct bind json as a struct, and convert to map func bindJsonStruct[T any](c *gin.Context) map[string]interface{} { var bindObj T err := c.ShouldBind(&bindObj) if err != nil { var requestBody []byte _, err := c.Request.Body.Read(requestBody) if err != nil { panic(err) } RequestErr(c, requestBody) return nil } jsonStr, _ := json.Marshal(bindObj) var jsonMap map[string]interface{} _ = json.Unmarshal(jsonStr, &jsonMap) if jsonMap == nil || len(jsonMap) == 0 { return nil } return jsonMap } func bindQuery(c *gin.Context) map[string]interface{} { jsonMap := map[string]interface{}{} queries := c.Request.URL.Query() for k := range queries { jsonMap[k] = c.Query(k) } return jsonMap }