2017-08-10 187 views
2

只有當蔬菜名稱不是胡蘿蔔或豆類或洋蔥時,我纔想訪問該方法,所以如果我給番茄它應該返回視圖。我使用的Url如下是否有任何錯誤的這個網址?Spring MVC中@RequestMapping()的正則表達式

@RequestMapping("/**/vegetables/{name:^[carrot|beans|onions]}") 
public String vegetablesNames(){ 
    return "vegetables"; 
} 
+0

將它作爲@PathVariable並檢查函數內容會不會更容易? RegExp是一件很大的事情,如果可以的話,我寧願避免它們。 – Peter777

回答

4

您應該驗證方法內:

@RequestMapping("/vegetables/{name}") 
public String vegetablesNames(@PathVariable String name){ 

    if (name.matches("your regex") { 
     throw new RuntimeException(name + " doesn't match"); 
    } 
    return "vegetables"; 
} 

@PathVarialbe是從請求URI中提取的變數。你可以提取它並隨意玩。

基本上,路徑應描述在該uri處可用的資源。如果資源不可用,則響應應該是例如NOT_FOUND。在Spring中,對導致RuntimeException的請求的默認響應是5xx,在這種情況下這不是一個好選擇,但這僅僅是一個示例。

如果您有興趣處理ExceptionsSpring,只需要澄清。

+1

沒問題。恕我直言,路徑應該描述一般格式,但不包含業務(或驗證)邏輯。內部驗證可以使用正則表達式,與列表進行比較,針對數據庫等進行檢查,並且將更容易更改,而不是路徑變量。 – Kayaman