Spring MVC的请求映射,可这是动态/配置?(Spring MVC Request mappi

2019-08-01 03:23发布

借助于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.

现在,在我的应用程序,管理员可以设置2个博客的网站,和1个部分,因此,网址会是这样:

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映射到控制器@RequestMapping("/helloWorld")的控制器或方法的水平,但是这使得网址映射固定的,而不是像配置我怎么想的那样。

更新:

我将在数据库中存储的路径,以及与映射到控制器的类型,以便像:

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

通过以上信息,我怎么可能把请求发送到正确的控制器?

同样,没有期待过载/重新部署,我意识到这将需要更多的工作,但其在规范:)

Answer 1:

请问这种对你的URL映射的工作?

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

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

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



Answer 2:

真正在运行时更改请求映射可能很难(而不是真正的建议,因为小误差很容易出现)。 如果仍然希望做到这一点,也许JRebel的,多specificly LiveRebel可以用于代码和配置现场调配有趣。

否则,像其他职位的建议,RequestMappings支持通配符,在此范围应该在官方文档的快速阅读后予以明确。



Answer 3:

试着用@RequestMapping通配符如下使用:

@RequestMapping(value="/article_section*/"}
public void getArticle(....){
//TODO implementation
}

@RequestMapping(value="/blog*/"}
public void getBlog(....){
//TODO implementation
}

希望这可以帮助!!!



Answer 4:

此外另一种解决方案可能是创建包含在已定义路径的自定义注解@RequestMapping ,也是新的应用,比方说@ApiRestController

然后,Spring上下文加载之前,该@Controller类可以更改为具有被新的在运行时改变了自己的注释值(与所需的路径)。 通过这样做,Spring将会加载增强请求映射,而不是默认的。

创建一个小的项目举例说明本的人,在未来需要这个https://gitlab.com/jdiasamaro/spring-api-rest-controllers 。

希望能帮助到你。 干杯。



Answer 5:

没有这方面的工作? @RequestMapping( “/的helloWorld *”)



文章来源: Spring MVC Request mapping, can this be dynamic/configurable?