我的主控制器为公共用户服务。它有以下映射:
@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
我发现我的主控制器映射具有更高的优先级。因此,/ admin / article的请求由主控制器处理,而不是由专用的AdminArticleController处理。我该如何解决这个问题?
我还注意到位于/static/default.css中的样式表请求也通过主控制器。有没有办法避免这种情况?
答案 0 :(得分:2)
更改您的网址方案。在Spring MVC中使用变量启动URL是非常糟糕的,因为您刚刚演示过。
将您的内容链接更改为/content/{contentId}
或为所有内容创建显式映射,即/sports
,/whatever
...
作为最后的手段,如果你绝对无法改变你的URL方案对用户的看法,请使用类似Tuckey urlrewrite的内容并重写:
/xyz -> /content/xyz
除“已知”上下文外,例如“admin”或“static”。