1

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

@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 中的样式表的请求也通过主控制器。有没有办法避免这种情况?

4

1 回答 1

2

更改您的 URL 方案。由于您刚刚演示的原因,在 Spring MVC 中使用变量启动 URL 非常糟糕。

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

作为最后的手段,如果你绝对不能改变你的 URL 方案对你的用户的外观,使用Tuckey urlrewrite 之类的东西并重新编写:

/xyz -> /content/xyz

除了“已知”上下文,如“管理员”或“静态”。

于 2012-05-03T11:40:26.330 回答