2012-01-25 166 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 !!! –