Spring MVC中的@RequestMapping注释

Cha*_*MSV 8 spring-mvc request-mapping

我有一个控制器,请求映射@RequestMapping("/**") 为什么意思?

如果我想从上面的映射中排除某些url模式,我该怎么做?

有人可以对此有所了解吗?

con*_*ept 15

通过使用正则表达式"负向前瞻"构造,我能够实现"url排除"或"不匹配url".

我希望我的处理程序能够处理除静态资源之外的所有内容,即CSS/Images/JS和错误页面.

为了防止错误页面的错误,即resourceNotFound,你将需要

  1. 编辑web.xml/web-app/error-page以使用/ error /作为错误url的前缀
  2. 编辑WEB-INF/spring/webmvc-config.xml/beans/mvc:view-controller/@ path handel你的新映射
  3. 编辑WEB-INF/spring/webmvc-config.xml/beans/bean [@class =**SimpleMappingExceptionResolver]将所有异常映射到error/...

在您的控制器中使用以下

@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";
      }
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

您的网址将截获与"/**"匹配的所有请求.根据您定义的位置,我不确定您为什么要这样做.在类级别,这应该定义基本路径,而在方法级别,它应该被细化到特定的功能.

如果要排除模式,可以定义另一个控制器,该控制器以更高的优先级排序到控制器,指定'/**'

以下是来自泉源的两个很好的参考:

  1. http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

  2. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html

  • /** 和 /* 之间有什么区别。我认为 /* 也会覆盖 /** 我正确吗? (2认同)