我们有一个具有以下路径模式的应用程序:/{language}/{subsystem}/blah/blah
language
和subsystem
变量将执行一些通用逻辑并适用于所有100+控制器,我想问一下,而不是在每个控制器中重复此通用逻辑100次,有没有办法定义一个集中式控制器,例如/{language}
用来处理语言逻辑和另一个集中控制器,例如
和/{subsystem}
哪个要处理子系统逻辑和所有其他控制器(从这些控制器中“扩展”)?
希望我能清楚地描述它。非常感谢,周末愉快:)
最佳答案
您可以考虑为您的应用程序编写custom Interceptor。该拦截器可以从您的URL路径中获取language
和subsystem
部分,并在中央位置调用您的通用逻辑。
这种方法有一些陷阱,您应该仔细权衡:
就我个人而言,我将采用另一种方法,并在每种控制器方法上使用
@RequestMapping
and @PathVariable
批注的组合,以捕获language
和subsystem
并将通用逻辑放入辅助方法中:@GetMapping("/{language}/{subsystem}/something")
public String doSomething(@PathVariable Language language, @PathVariable Subsystem subsystem) {
LanguageSubsystemHelper.doSomething(language, subsystem);
// ...
}
通过提供可用于所有控制器方法的助手,将重复的次数减至最少。这种方法的好处是:
language
和subsystem