14

使用 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 个文章部分,因此 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 怎么可能做到这一点?

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

更新:

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

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

有了上述信息,我如何将请求发送到正确的控制器?

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

4

5 回答 5

5

这种 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

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

于 2012-10-03T14:13:54.317 回答
2

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

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

于 2012-10-03T14:21:35.787 回答
1

尝试使用@RequestMapping 通配符,如下所示:

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

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

希望这可以帮助!!!

于 2014-04-01T19:15:44.127 回答
1

另一种解决方案可能是创建一个自定义注释,其中包含已定义的路径@RequestMapping以及要应用的新路径,比如说@ApiRestController.

然后,在 Spring 上下文加载之前,@Controller可以更改类以使其注释值在运行时由新的(使用所需的路径)更改。通过这样做,Spring 将加载增强的请求映射,而不是默认的。

创建了一个小项目来为将来需要这个的人举例说明https://gitlab.com/jdiasamaro/spring-api-rest-controllers

希望能帮助到你。干杯。

于 2018-04-01T17:56:33.277 回答
0

这不行吗?@RequestMapping("/helloWorld*")

于 2012-10-03T14:15:08.180 回答