我有一个项目被分成不同的模块,例如你有一个网站和一个论坛。拦截请求并在内部转发给控制器?
论坛,可以发现:
http://example.com/[forum]/
和例如可以是:
http://example.com/support/
http://example.com/helpme/
http://example.com/aforum/
该网站,可以发现:
http://example.com/[site]/
和例如可:
http://example.com/site1/
http://example.com/nice/
http://example.com/something/
[forum]和[site]部分是可变的。在我的数据库中,我查找“nice”是一个网站,“helpme”是一个论坛。
我有我的ForumController弹簧RequestMapping:
@RequestMapping(value = { "/{simpleTitle:[0-9a-z-]+}" }, method = RequestMethod.GET, produces = "text/html")
public void list(@PathVariable String simpleTitle, Model model, HttpServletRequest req, HttpServletResponse resp) {
我有一个网站samething,所以SiteController:
@RequestMapping(value = { "/{simpleTitle:[0-9a-z-]+}" }, method = RequestMethod.GET, produces = "text/html")
public void list(@PathVariable String simpleTitle, Model model, HttpServletRequest req, HttpServletResponse resp) {
这当然变坏,造成2个控制器具有相同requestmapping不好。
我可以创建一个FrontController与上述请求映射,查找什么simpleTitle(论坛或网站)和调用功能来显示论坛或网站。这样可行。
但它并不是非常“春天”的喜欢和结构。
是否有可能“拦截”一个请求,并在控制器上自己内部转发(或调用该函数)?
这样我可以让Interceptor看起来很简单,决定它是论坛还是站点,并且“转发”/“调用”正确的控制器。
不知道这是否是你的spring-ish,但你可以通过参数S(对于站点)或F(对于论坛)来获得spring bean,并且这个bean将在内部执行重定向。您将为(S)ite和(F)orum的实现实现通用接口。您可以在另一个bean中抽象出路径的检索。 –
@LuiggiMendoza这听起来确实是春天;-)虽然我很难理解它,但是你能否再解释一下?没有大的例子需要,只是基本知识或者可能只是一个解释它多一点的网址。 – TinusSky