【发布时间】:2012-01-25 05:48:57
【问题描述】:
我有一个请求映射为@RequestMapping("/**") 的控制器
什么意思?
如果我想从上述映射中排除某些 url 模式,我该怎么做?
有人能解释一下吗?
【问题讨论】:
-
另外请告诉我 url 模式如何与 @RequestMapping 一起使用。谢谢。
标签: spring-mvc request-mapping
我有一个请求映射为@RequestMapping("/**") 的控制器
什么意思?
如果我想从上述映射中排除某些 url 模式,我该怎么做?
有人能解释一下吗?
【问题讨论】:
标签: spring-mvc request-mapping
通过使用正则表达式“负前瞻”构造,我能够实现“url 排除”或“不匹配 url”。
我希望我的处理程序处理静态资源以外的所有内容,即 CSS/Images/JS 和错误页面。
为了防止错误页面的处理,即resourceNotFound,您需要
在你的控制器中使用下面的
@Controller
@RequestMapping(value = { "/" })
public class CmsFrontendController {
@RequestMapping(value = { "/" }, headers = "Accept=text/html")
public String index(Model ui) {
return addMenu(ui, "/");
}
@RequestMapping(value = { "{path:(?!resources|error).*$}", "{path:(?!resources|error).*$}/**" }, headers = "Accept=text/html")
public String index(Model ui, @PathVariable(value = "path")String path) {
try {
path = (String) request.getAttribute(
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
return addMenu(ui, path);
} catch (Exception e) {
log.error("Failed to render the page. {}", StackTraceUtil.getStackTrace(e));
return "error/general";
}
}
}
【讨论】:
您的网址将拦截所有匹配“/**”的请求。根据您定义的位置,我不确定您为什么要这样做。在类级别,这应该定义基本路径,而在方法级别,它应该细化为特定的功能。
如果您想排除一个模式,您可以定义另一个控制器,该控制器的优先级高于指定 '/**' 的控制器
这里有 2 个来自 spring 源的很好的参考:
【讨论】: