From 166ce9a52a6357c104acce6a67f2fa91c6ddf094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 26 Dec 2025 17:32:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96RequestHandler?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logger/instance.go | 1 + router/handler.go | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/logger/instance.go b/logger/instance.go index 82991de..8491cb5 100644 --- a/logger/instance.go +++ b/logger/instance.go @@ -50,4 +50,5 @@ const ( CodeInjectCommonParam = "inject-common-param" CodeLogicHook = "logic-hook" CodeParamValidateFailure = "param-validate-failure" + CodeLogicErrorWrapper = "logic-error-wrapper" ) diff --git a/router/handler.go b/router/handler.go index 566cc80..58bacf8 100644 --- a/router/handler.go +++ b/router/handler.go @@ -70,7 +70,7 @@ func (s *server) RequestHandler(uriCfg UriConfig) gin.HandlerFunc { return } // 表单数据 - inputValue := reflect.ValueOf(formValue) + inputValue := reflect.ValueOf(formValue).Elem() // 注入公共参数 if err = s.injectCommonParam(ctx, inputValue); nil != err { @@ -95,11 +95,7 @@ func (s *server) RequestHandler(uriCfg UriConfig) gin.HandlerFunc { } // 此处暴露出去,是为了使用方可以获取到对应数据 ctx.Set(consts.GinLogicAfterResponseKey, logicAfterResponse) - defer s.hook(ctx, uriCfg) // 执行Logic之后的相关逻辑 - // 执行逻辑 - if uriCfg.FormDataType.Kind() != reflect.Ptr { - inputValue = inputValue.Elem() - } + defer s.hook(ctx, uriCfg) // 执行 Logic 之后的相关逻辑 firstParam = reflect.ValueOf(ctx) resList := uriCfg.ApiLogicFunc.Func.Call([]reflect.Value{uriCfg.ApiStructValue, firstParam, inputValue}) @@ -112,9 +108,12 @@ func (s *server) RequestHandler(uriCfg UriConfig) gin.HandlerFunc { // 请求失败 if ok = errors.As(resList[1].Interface().(error), &e); ok { // 本身就是exception.IException + logger.Instance.Debug("请求结果err类型为 exception.IException, 无需特殊处理", loggerPkg.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeLogicErrorWrapper, map[string]any{}).ToFieldList()...) } else if err, ok = resList[1].Interface().(error); ok { + logger.Instance.Debug("请求结果err类型为 error, 包装为 exception.IException", loggerPkg.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeLogicErrorWrapper, map[string]any{}).ToFieldList()...) e = exception.NewFromError(-1, err) } else { + logger.Instance.Debug("请求结果err类型 既不是 error 也不是 exception.IException, 包装为 exception.IException", loggerPkg.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeLogicErrorWrapper, map[string]any{}).ToFieldList()...) e = exception.NewWithCodeAndData(-1, map[string]any{ "err": resList[1].Interface(), })