feat: 优化RequestHandler处理

This commit is contained in:
2025-12-26 17:32:33 +08:00
parent e415bad869
commit 166ce9a52a
2 changed files with 6 additions and 6 deletions

View File

@@ -50,4 +50,5 @@ const (
CodeInjectCommonParam = "inject-common-param"
CodeLogicHook = "logic-hook"
CodeParamValidateFailure = "param-validate-failure"
CodeLogicErrorWrapper = "logic-error-wrapper"
)

View File

@@ -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(),
})