Spring MVC 3 RequestMapping与正则表达式量词

时间:2011-02-18 15:13:54

标签: java regex spring spring-mvc

以下方法失败 “PatternSyntaxException:在索引附近未计算闭包......”

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

看起来模式匹配器正在修剪过多的字符串而丢失了最后一个}。

有没有人知道这个bug的解决方法?我不得不将限定符放到“/ {id:[0-9 | a-z] +}” - 这很坦率地说很糟糕!

2 个答案:

答案 0 :(得分:6)

这是一个解决方案。这很丑陋,但它相当于你想拥有的东西:

@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]

如果这是获得所需物品的唯一途径,那么你也可以使用这个怪物。

答案 1 :(得分:5)

除了手动验证之外,我认为这种情况没有任何好的解决方法。毕竟,引入了{name:regexp}语法来解决映射之间的歧义而不是验证。

@Valid上的{p> @PathVariable可能是一个解决方案,但它仅在Spring 3.1(SPR-6380)中得到承诺。

也可以在Spring JIRA中报告此错误,但我不希望他们快速修复它,因为路径变量处理代码已经很乱了。