我想知道是否有可能使Spring MVC在解析控制器类时像条纹一样工作。
通常我可以用@RequestMapping
注释控制器,以便将其映射到它的URL。
然而,我的老板要求采用一种从Stripes衍生出来的"约定重于配置"机制,经过多年的工作,我们逐渐放弃了这种机制。
您可以看到,条纹Actions
在其名称中包含stripes.action
的包的类路径下被扫描。每个子包都是一个虚拟目录,最终一个名为SomethingAction
的类将映射到url Something.action
。
当我需要做的是如下:
com.example.product.web.controllers.secure.admin.UserController
映射到/secure/admin/user
com.example.something.different.from.before.web.controllers.pub.WelcomeController mapping
到/pub/welcome
基本上我想让Spring MVC自动映射控制器根据他们的完整类名,而不是使用@RequestMapping
在每个控制器。
重要!我不需要确切的命名约定(web.controllers
),如果Spring MVC已经有一个命名约定。我只是需要一个。
ControllerClassNameHandlerMapping会按照您的期望开箱即用。
只需将基本包设置为com.example.product.web.controllers
,子包将映射为路径。引用API文档
指定像"com.mycompany"这样的基本包。将基包中的子包作为路径元素包括在内,例如为类名"com.mycompany.myapp.mymodule.BuyForm"生成路径"/mymodule/buyform"。
子包层次结构表示为单独的路径元素,例如:"/mymodule/mysubmodule/buyform"用于类名"com.mycompany.myapp.mymodule.mysubmodule.BuyForm"。
请注意,它被限制为只有一个基本包。如果要扫描不同的包层次结构,则必须相应地定制ControllerClassNameHandlerMapping
的行为。