以下方法失败 “PatternSyntaxException:在索引附近未计算闭包......”
@RequestMapping(value ="/{id:[0-9|a-z]{15}}")
public View view(@PathVariable final String id) {
...
}
看起来模式匹配器正在修剪过多的字符串而丢失了最后一个}。
有没有人知道这个bug的解决方法?我不得不将限定符放到“/ {id:[0-9 | a-z] +}” - 这很坦率地说很糟糕!
答案 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中报告此错误,但我不希望他们快速修复它,因为路径变量处理代码已经很乱了。