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"`