Merge pull request #4582 from flycash/webMock

Optimize AddAutoPrefix: only register one router in case insensitive mode
This commit is contained in:
Ming Deng 2021-04-19 22:51:39 +08:00 committed by GitHub
commit 7579d83551
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 14 deletions

View File

@ -34,7 +34,8 @@
- Integration: DeepSource [4560](https://github.com/beego/beego/pull/4560) - Integration: DeepSource [4560](https://github.com/beego/beego/pull/4560)
- Integration: Remove unnecessary function call [4577](https://github.com/beego/beego/pull/4577) - 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) - 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 ## Fix Sonar
- [4473](https://github.com/beego/beego/pull/4473) - [4473](https://github.com/beego/beego/pull/4473)

View File

@ -732,20 +732,30 @@ func (p *ControllerRegister) AddAutoPrefix(prefix string, c ControllerInterface)
ct := reflect.Indirect(reflectVal).Type() ct := reflect.Indirect(reflectVal).Type()
controllerName := strings.TrimSuffix(ct.Name(), "Controller") controllerName := strings.TrimSuffix(ct.Name(), "Controller")
for i := 0; i < rt.NumMethod(); i++ { for i := 0; i < rt.NumMethod(); i++ {
if !utils.InSlice(rt.Method(i).Name, exceptMethod) { methodName := rt.Method(i).Name
pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name), "*") if !utils.InSlice(methodName, exceptMethod) {
patternInit := path.Join(prefix, controllerName, rt.Method(i).Name, "*") p.addAutoPrefixMethod(prefix, controllerName, methodName, ct)
patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name)) }
patternFixInit := path.Join(prefix, controllerName, rt.Method(i).Name) }
}
route := p.createBeegoRouter(ct, pattern) func (p *ControllerRegister) addAutoPrefixMethod(prefix, controllerName, methodName string, ctrl reflect.Type) {
route.methods = map[string]string{"*": rt.Method(i).Name} pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(methodName), "*")
for m := range HTTPMETHOD { patternInit := path.Join(prefix, controllerName, methodName, "*")
p.addToRouter(m, pattern, route) patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(methodName))
p.addToRouter(m, patternInit, route) patternFixInit := path.Join(prefix, controllerName, methodName)
p.addToRouter(m, patternFix, route)
p.addToRouter(m, patternFixInit, route) 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)
} }
} }
} }