春季MVC请求映射,这可以是动态/可配置的吗?

2022-09-04 04:00:51

使用Spring MVC,我知道您如何在每个控制器和方法/操作中设置。RequestMapping

但是,如果我希望这是可配置的,那么例如我使用以下控制器呢:

BlogController 
 - with methods for listing blogs entries, single entry, new, update, etc.
ArticleController
 - with methods for listing articles entries, single entry, new, update, etc.

现在,在我的应用程序中,管理员可以为webiste设置2个博客,以及1个文章部分,因此URL将如下所示:

www.example.com/article_section1/ - uses ArticleController
www.example.com/blog1/ - uses BlogController
www.example.com/blog2/ - uses BlogController

也许过了一会儿,管理员想要另一个文章部分,所以他们只是用一个新的部分来配置它,比如:

www.example.com/article_section2/

这必须动态/动态工作,当然不必重新启动应用程序。

我的问题只涉及如何处理到控制器的URL映射。

如何使用Spring MVC实现这一点?

我只知道如何在控制器或方法级别使用将URL映射到控制器,但这会使url映射固定并且无法像我想要的那样进行配置。@RequestMapping("/helloWorld")

更新:

我将路径存储在数据库中,并映射到控制器的类型,如下所示:

path                  controller
/article_section1/    article
/blog1/               blog
/blog2/               blog
..

有了上述信息,我如何将请求分派给正确的控制器?

同样,我不想重新加载/重新部署,我意识到这将需要更多的工作,但它在规范中:)


答案 1

这种 URL 映射是否适合您?

www.example.com/blog/1/
www.example.com/blog/2/

如果是,那么这很简单:Spring 3支持路径变量:http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html#mvc-ann-requestmapping-advanced

或者,您可以创建一个通用请求映射和您自己的子调度程序来读取配置文件,但我认为这可能比它的价值更多。


答案 2

在运行时真正更改请求映射可能很困难(并且不建议这样做,因为很容易发生小错误)。如果你仍然希望这样做,也许JRebel,更具体地说,LiveRebel对于代码和配置的实时重新部署可能很有趣。

否则,像其他帖子建议的那样,RequestMappings支持通配符,在快速阅读官方文档后,应该明确其限制。


推荐