From 86bbea337d113d8354e1056d6de0bb6806a96652 Mon Sep 17 00:00:00 2001 From: RockYang Date: Thu, 23 Nov 2023 17:50:55 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=A2=9E=E5=8A=A0=E4=B8=AD=E9=97=B4?= =?UTF-8?q?=E4=BB=B6=E8=87=AA=E5=8A=A8=E5=AF=B9HTTP=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E7=9A=84=E5=8F=82=E6=95=B0=E5=8E=BB=E6=8E=89=E9=A6=96=E5=B0=BE?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/core/app_server.go | 64 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) 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) + } + } + } +}