Spring MVC 3 RequestMapping with regular expresssion quantifiers

dom*_*arr 3 java regex spring spring-mvc

下面的方法失败,出现"PatternSyntaxException:Unclosed count closure near index ..."

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

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

有没有人知道这个bug的工作?我不得不将限定符放到"/ {id:[0-9 | az] +}" - 这很坦率!

Sea*_*oyd 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]
Run Code Online (Sandbox Code Playgroud)

如果这是获得你需要的唯一方法,你也可以使用这个怪物.


axt*_*avt 5

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

@Valid@PathVariables上可能是一个解决方案,但它仅在Spring 3.1(SPR-6380)中得到承诺.

也可以随意报告Spring JIRA中的这个错误,虽然我不希望他们快速修复它,因为路径变量处理代码已经很乱了.