【问题标题】:Package-based controller resolving in Spring MVCSpring MVC 中基于包的控制器解析
【发布时间】:2015-08-21 07:59:28
【问题描述】:

我想知道在解析控制器类时是否可以让 Spring MVC 像 Stripes 一样工作。

通常我可以用 @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

重要!如果 Spring MVC 已经有命名约定,我不需要完全那个命名约定 (web.controllers)。我只需要一个。

到目前为止,我还没有发现任何线索。 谢谢

【问题讨论】:

    标签: java spring-mvc naming-conventions convention-over-configur


    【解决方案1】:

    ControllerClassNameHandlerMapping 开箱即用,满足您的期待。

    只需将基本包设置为com.example.product.web.controllers,子包就会为您映射为路径。引用 API 文档

    指定一个基本包,如“com.mycompany.myapp”,以在该基本包中包含子包作为路径元素,例如为类名“com.mycompany.myapp.mymodule.BuyForm”生成路径“/mymodule/buyform”。

    子包层次结构表示为单独的路径元素,例如类名“com.mycompany.myapp.mymodule.mysubmodule.BuyForm”的“/mymodule/mysubmodule/buyform”。

    请注意,它仅限于单个基础包。如果要扫描不同的包层次结构,ControllerClassNameHandlerMapping 的行为必须相应地自定义。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2013-02-02
      • 2013-12-05
      相关资源
      最近更新 更多