2011-02-18 47 views
3

下面的方法失敗, 「PatternSyntaxException:近指標未關閉的統計閉合......」Spring MVC的3 RequestMapping定期expresssion量詞

@RequestMapping(value ="/{id:[0-9|a-z]{15}}") 
public View view(@PathVariable final String id) { 
    ... 
} 

貌似模式匹配的修剪過多斷絃和失去最後一個}。

有誰知道這個bug周圍的工作?我必須將限定符放到「/ {id:[0-9 | a-z] +}」 - 坦率地說,這真是太棒了!

+0

什麼`[0-9A-Z] {15}`? – mdrg 2011-02-18 15:17:17

+0

@mdrg它是打破的限定詞,而不是表達式本身。我想這個或者不是真的需要。 – 2011-02-18 15:18:56

回答

5

我不認爲有這種情況,除了手動驗證什麼好的解決方法。畢竟,引入{name:regexp}語法是爲了解決映射之間的模糊問題,而不是用於驗證。

@Valid on @PathVariable s可能是一個解決方案,但它只承諾在Spring 3.1(SPR-6380)。

,也歡迎在Spring JIRA報告這個錯誤,雖然我不指望他們迅速修復它,因爲路徑變量處理代碼已經是一個爛攤子。

5

這裏有一個解決方案。它的對接醜陋,但它相當於你想要什麼有:

@RequestMapping(value = "/{id:[0-9a-z][0-9a-z][0-9a-z][0-9a-z]" + 
     "[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z]" + 
     "[0-9a-z][0-9a-z][0-9a-z][0-9a-z]}") // 15 repetitions of [0-9a-z] 

如果這是得到你需要,你還不如用這個怪物什麼的唯一方式。