2012-01-25 112 views
8

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

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

有人可以请说一说吗?

+0

另请指教我如何使用@RequestMapping URL模式。谢谢。 –

回答

7

您的网址将拦截所有匹配'/ **'的请求。根据你在哪里定义这个,我不知道你为什么要这样做。在类级别上,它应该定义基本路径,而在方法级别上,它应该被细化为特定函数。

如果你想排除的模式,你可以定义在更高的优先级排序控制器指定“/ **”

下面是春源2场很好的参考另一个控制器:

  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

+1

/**和/ *之间的区别是什么?我会认为/ *也会覆盖/ ** 我是否正确? –

+1

恰恰相反。谷歌“蚂蚁风格模式”或类似的东西... –

14

通过使用正则表达式“negative lookahead”构造,我能够实现“url排除”或“不匹配url”。

我希望我的处理程序处理除静态资源(即CSS/Images/JS和错误页面)以外的所有内容。

为了防止错误页面HANDELING即resourceNotFound你需要

  1. 编辑web.xml/web应用/错误页面前缀/错误的错误网址/
  2. 编辑WEB-INF/spring/webmvc-config.xml/beans/mvc:view-controller/@ path handel您的新映射
  3. 编辑WEB-INF/spring/webmvc-config.xml/beans/bean [@ class = ** SimpleMappingExceptionResolver]将所有异常映射为错误/ ...

在您的控制器中使用下面的

@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"; 
     } 
    } 
} 
+1

必须有一个更可维护的解决方案比这... ...?人。 – roufamatic

+0

太棒了,非常感谢@concept! – Gilead

+0

非常感谢@conept !!! –