diff --git a/api/core/app_server.go b/api/core/app_server.go index eed70cbe..887aad25 100644 --- a/api/core/app_server.go +++ b/api/core/app_server.go @@ -1,6 +1,7 @@ package core import ( + "bytes" "chatplus/core/types" "chatplus/service/fun" "chatplus/store/model" @@ -58,6 +59,7 @@ func (s *AppServer) Init(debug bool, client *redis.Client) { } s.Engine.Use(corsMiddleware()) s.Engine.Use(authorizeMiddleware(s, client)) + s.Engine.Use(parameterHandlerMiddleware()) s.Engine.Use(errorHandler) // 添加静态资源访问 s.Engine.Static("/static", s.Config.StaticDir) @@ -209,3 +211,65 @@ func authorizeMiddleware(s *AppServer, client *redis.Client) gin.HandlerFunc { c.Set(types.LoginUserID, claims["user_id"]) } } + +// 统一参数处理 +func parameterHandlerMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + // GET 参数处理 + params := c.Request.URL.Query() + for key, values := range params { + for i, value := range values { + params[key][i] = strings.TrimSpace(value) + } + } + // 更新参数 + c.Request.URL.RawQuery = params.Encode() + + // POST JSON 参数处理 + bodyBytes, err := io.ReadAll(c.Request.Body) + if err != nil { + c.Next() + return + } + + // 还原请求体 + c.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) + // 将请求体解析为 JSON + var jsonData map[string]interface{} + if err := c.ShouldBindJSON(&jsonData); err != nil { + c.Next() + return + } + + // 对 JSON 数据中的字符串值去除两端空格 + trimJSONStrings(jsonData) + // 更新请求体 + c.Request.Body = io.NopCloser(bytes.NewBufferString(utils.JsonEncode(jsonData))) + + c.Next() + } +} + +// 递归对 JSON 数据中的字符串值去除两端空格 +func trimJSONStrings(data interface{}) { + switch v := data.(type) { + case map[string]interface{}: + for key, value := range v { + switch valueType := value.(type) { + case string: + v[key] = strings.TrimSpace(valueType) + case map[string]interface{}, []interface{}: + trimJSONStrings(value) + } + } + case []interface{}: + for i, value := range v { + switch valueType := value.(type) { + case string: + v[i] = strings.TrimSpace(valueType) + case map[string]interface{}, []interface{}: + trimJSONStrings(value) + } + } + } +}