From d6f80689a036408b32a61694f69ded5cdf9fdf21 Mon Sep 17 00:00:00 2001 From: Ming Deng Date: Mon, 19 Apr 2021 22:12:34 +0800 Subject: [PATCH 1/2] Optimize AddAutoPrefix: only register one router if it's not case sensetive --- server/web/router.go | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/server/web/router.go b/server/web/router.go index b4c550f9..7a578e4b 100644 --- a/server/web/router.go +++ b/server/web/router.go @@ -732,20 +732,30 @@ func (p *ControllerRegister) AddAutoPrefix(prefix string, c ControllerInterface) ct := reflect.Indirect(reflectVal).Type() controllerName := strings.TrimSuffix(ct.Name(), "Controller") for i := 0; i < rt.NumMethod(); i++ { - if !utils.InSlice(rt.Method(i).Name, exceptMethod) { - pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name), "*") - patternInit := path.Join(prefix, controllerName, rt.Method(i).Name, "*") - patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name)) - patternFixInit := path.Join(prefix, controllerName, rt.Method(i).Name) + methodName := rt.Method(i).Name + if !utils.InSlice(methodName, exceptMethod) { + p.addAutoPrefixMethod(prefix, controllerName, methodName, ct) + } + } +} - route := p.createBeegoRouter(ct, pattern) - route.methods = map[string]string{"*": rt.Method(i).Name} - for m := range HTTPMETHOD { - p.addToRouter(m, pattern, route) - p.addToRouter(m, patternInit, route) - p.addToRouter(m, patternFix, route) - p.addToRouter(m, patternFixInit, route) - } +func (p *ControllerRegister) addAutoPrefixMethod(prefix, controllerName, methodName string, ctrl reflect.Type) { + pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(methodName), "*") + patternInit := path.Join(prefix, controllerName, methodName, "*") + patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(methodName)) + patternFixInit := path.Join(prefix, controllerName, methodName) + + route := p.createBeegoRouter(ctrl, pattern) + route.methods = map[string]string{"*": methodName} + for m := range HTTPMETHOD { + + p.addToRouter(m, pattern, route) + + // only case sensitive, we add three more routes + if p.cfg.RouterCaseSensitive { + p.addToRouter(m, patternInit, route) + p.addToRouter(m, patternFix, route) + p.addToRouter(m, patternFixInit, route) } } } From 636d6cf09fea6281ede64e391bddeeb46c48f9c2 Mon Sep 17 00:00:00 2001 From: Ming Deng Date: Mon, 19 Apr 2021 22:32:08 +0800 Subject: [PATCH 2/2] Add CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59efffc4..8dbe15d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,8 @@ - Integration: DeepSource [4560](https://github.com/beego/beego/pull/4560) - Integration: Remove unnecessary function call [4577](https://github.com/beego/beego/pull/4577) - Feature issue #4402 finish router get example. [4416](https://github.com/beego/beego/pull/4416) -- Proposal: Add Bind() method for web.Controller [4491](https://github.com/beego/beego/issues/4491) +- Proposal: Add Bind() method for `web.Controller` [4491](https://github.com/beego/beego/issues/4579) +- Optimize AddAutoPrefix: only register one router in case-insensitive mode. [4582](https://github.com/beego/beego/pull/4582) ## Fix Sonar - [4473](https://github.com/beego/beego/pull/4473)