From 293f8299457b3f11beee3aea3a97c46cf40d4472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Mon, 17 Feb 2025 16:31:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8D=E5=B0=84=E6=94=AF=E6=8C=81=20controll?= =?UTF-8?q?er=20=E6=8C=87=E9=92=88=E4=B8=8E=E6=99=AE=E9=80=9A=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B;=20=E5=87=BD=E6=95=B0=E8=B0=83=E7=94=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8C=87=E9=92=88=E5=8F=82=E6=95=B0=E4=B8=8E=E9=9D=9E?= =?UTF-8?q?=E6=8C=87=E9=92=88=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/controller.go | 18 +++--------------- router/handler.go | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/router/controller.go b/router/controller.go index 3804b1f..c352744 100644 --- a/router/controller.go +++ b/router/controller.go @@ -37,21 +37,9 @@ func (c controller) Parse(inputController any) map[string]UriConfig { return parseRes } controllerType := reflect.TypeOf(inputController) + inputController = reflect.New(controllerType).Interface() + controllerType = reflect.TypeOf(inputController) controllerValue := reflect.ValueOf(inputController) - /*if controllerType.Kind() == reflect.Func { - // 直接函数注册 - cfg, isNeedRegister := c.methodConfig(controllerType) - if isNeedRegister { - parseRes[cfg.Path] = cfg - } - return parseRes - }*/ - if controllerType.Kind() == reflect.Ptr { - controllerValue = controllerValue.Elem() - } - /*if controllerValue.IsNil() { - return parseRes - }*/ for methodIdx := 0; methodIdx < controllerType.NumMethod(); methodIdx++ { uriCfg, needRegister := c.methodConfig(controllerType.Method(methodIdx)) if !needRegister { @@ -88,10 +76,10 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n } // 解析第二个参数是组合Meta的form表单 formType := methodType.In(2) + cfg.FormDataType = formType if formType.Kind() == reflect.Ptr { formType = methodType.In(2).Elem() } - cfg.FormDataType = formType metaField, metaFieldExist := formType.FieldByName(FieldNameMeta) if !metaFieldExist { needRegister = false diff --git a/router/handler.go b/router/handler.go index ce791f3..1dd18c5 100644 --- a/router/handler.go +++ b/router/handler.go @@ -28,17 +28,27 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc { e exception.IException ) - formData := reflect.New(uriCfg.FormDataType).Interface() - // 表单解析 - if err = request.Form.Parse(ctx, formData); nil != err { + var formParam reflect.Value + if uriCfg.FormDataType.Kind() == reflect.Ptr { + formParam = reflect.New(uriCfg.FormDataType.Elem()) + } else { + // 表单解析 + formParam = reflect.New(uriCfg.FormDataType) + } + formValue := formParam.Interface() + if err = request.Form.Parse(ctx, &formParam); nil != err { // 格式化验证错误的信息 - err = GetValidateErr(formData, err) + err = GetValidateErr(formValue, err) e = exception.NewFromError(400, err) response.SendWithException(ctx, e, nil) return } + // 执行逻辑 - resList := uriCfg.ApiLogicFunc.Func.Call([]reflect.Value{uriCfg.ApiStructValue, reflect.ValueOf(ctx), reflect.ValueOf(formData)}) + if uriCfg.FormDataType.Kind() != reflect.Ptr { + formParam = formParam.Elem() + } + resList := uriCfg.ApiLogicFunc.Func.Call([]reflect.Value{uriCfg.ApiStructValue, reflect.ValueOf(ctx), formParam}) if resList[1].IsNil() { // 请求成功 response.Success(ctx, resList[0].Interface())