Spring 3控制器映射冲突

时间:2012-05-03 03:47:47

标签: spring controller mapping

我的主控制器为公共用户服务。它有以下映射:

@Controller
@RequestMapping(value="/") 
public class HomeController extends BaseController {

@RequestMapping("/") // handles www.somesite.com
public ModelAndView request(Model model) {

@RequestMapping("/{contentId}")  // handles www.somesite.com/sports
public ModelAndView requestWithContentId(@PathVariable String contentId, Model model) {

@RequestMapping("/{contentId}/**") // handles www.somesite.com/sports/hockey/nhl , etc
public ModelAndView requestWithContentId2(@PathVariable String contentId, Model model) {

我还有一组管理控制器,映射到匹配/ admin *的路径。这是一个例子:

@Controller
@RequestMapping(value="/admin/article")
public class AdminArticleController extends BaseController
  1. 我发现我的主控制器映射具有更高的优先级。因此,/ admin / article的请求由主控制器处理,而不是由专用的AdminArticleController处理。我该如何解决这个问题?

  2. 我还注意到位于/static/default.css中的样式表请求也通过主控制器。有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:2)

更改您的网址方案。在Spring MVC中使用变量启动URL是非常糟糕的,因为您刚刚演示过。

将您的内容链接更改为/content/{contentId}或为所有内容创建显式映射,即/sports/whatever ...

作为最后的手段,如果你绝对无法改变你的URL方案对用户的看法,请使用类似Tuckey urlrewrite的内容并重写:

/xyz -> /content/xyz

除“已知”上下文外,例如“admin”或“static”。