From cb4718a2698ecb1f5790e69acdb9659bcfa3f672 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, 7 Feb 2025 17:25:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E8=BF=94=E5=9B=9E=E5=80=BC=E4=B8=A5=E6=A0=BC=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=97=B6,=20=E6=A0=A1=E9=AA=8C=E4=B8=8D=E9=80=9A?= =?UTF-8?q?=E8=BF=87,=20=E7=94=B1=E5=BF=BD=E7=95=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=BF=AE=E6=94=B9=E4=B8=BApanic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/controller.go | 22 ++++++++++------------ router/register_test.go | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/router/controller.go b/router/controller.go index b9d83c0..8c6f5da 100644 --- a/router/controller.go +++ b/router/controller.go @@ -98,18 +98,6 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n return } - // 解析第一个返回值, 要求必须是结构体或者是map - outputStrictModel := metaField.Tag.Get(TagNameOutputStrict) - // 输出是否严格模式 - cfg.OutputStrict = outputStrictModel == "1" || outputStrictModel == "true" - if cfg.OutputStrict { - // 开启输出严格模式校验 - if methodType.Out(0).Kind() != reflect.Struct && methodType.Out(0).Kind() != reflect.Map { - needRegister = false - return - } - } - if methodType.Out(1).Kind().String() != ErrorType { // 判断是否是实现 error接口的方法 outputErrParse := false @@ -132,6 +120,16 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n cfg.RequestMethod = metaField.Tag.Get(TagNameMethod) cfg.Desc = metaField.Tag.Get(TagNameDesc) cfg.TagList = strings.Split(metaField.Tag.Get(TagNameUriTag), ",") + // 解析第一个返回值, 要求必须是结构体或者是map + outputStrictModel := metaField.Tag.Get(TagNameOutputStrict) + cfg.OutputStrict = outputStrictModel == "1" || outputStrictModel == "true" + if cfg.OutputStrict { + // 开启输出严格模式校验 + if methodType.Out(0).Kind() != reflect.Struct && methodType.Out(0).Kind() != reflect.Map { + panic(cfg.Path + " : 接口配置输出严格校验, 输出数据类型必须为 struct 或 *struct 或 map, 实际返回数据类型 : " + methodType.Out(0).Kind().String()) + return + } + } // 解析参数配置 cfg.ParamList = c.parseParamConfig(formType) cfg.ApiLogicFunc = reflectMethod diff --git a/router/register_test.go b/router/register_test.go index 82a308f..b19a439 100644 --- a/router/register_test.go +++ b/router/register_test.go @@ -20,7 +20,7 @@ func (t TestController) Logic(ctx *gin.Context, formData *TestForm) (any, error) } type TestForm struct { - Meta `tag:"测试表单" path:"/a/b/c/d" desc:"测试接口" method:"get" strict:"true"` + Meta `tag:"测试表单" path:"/a/b/c/d" desc:"测试接口" method:"get"` Age int `json:"age" form:"age" binding:"min=20"` Name string `json:"name" form:"name"` Test *Test `json:"test" form:"test"`