Spring MVC 3 RequestMapping 与正则表达式量词
Posted
技术标签:
【中文标题】Spring MVC 3 RequestMapping 与正则表达式量词【英文标题】:Spring MVC 3 RequestMapping with regular expresssion quantifiers 【发布时间】:2011-06-29 21:38:24 【问题描述】:下面的方法失败了 “PatternSyntaxException:索引附近的未闭合计数闭合...”
@RequestMapping(value ="/id:[0-9|a-z]15")
public View view(@PathVariable final String id)
...
看起来模式匹配器对字符串进行了太多修剪并丢失了最后一个 。
有没有人知道这个错误的解决方法?我不得不将限定词放到 "/id:[0-9|a-z]+" - 坦率地说,这很糟糕!
【问题讨论】:
@mdrg 破坏的是限定符,而不是表达式本身。我想 or 并不是真正需要的。 试过 : (value ="/id:[0-9|a-z]15, ") ? 【参考方案1】:除了手动验证外,我认为这种情况没有任何好的解决方法。毕竟,name:regexp
语法的引入是为了解决映射之间的歧义,而不是为了验证。
@PathVariable
s 上的@Valid
可能是一个解决方案,但仅在 Spring 3.1 (SPR-6380) 中承诺。
也可以随时在Spring JIRA 中报告此错误,尽管我不希望他们很快修复它,因为路径变量处理代码已经很乱了。
【讨论】:
【参考方案2】:这里有一个解决方案。它很丑,但它相当于你想要的:
@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]
如果这是获得你需要的唯一方法,你还不如使用这个怪物。
【讨论】:
哇!耻辱必须是32次。 15 只是帖子的一个随机数。现在我不得不争论这是否真的是“正确”的答案。 我可以把它拉成一个具有合理名称的静态最终字符串。我会给你一票纯粹的聪明。 :) @dom 有时一个邪恶的黑客是唯一的出路:-) 好吧,正则表达式 [0-9a-z]15 中有“x 次”表达式,或者如果与另一个控制器没有歧义,则 [0-9a-z]*然后在控制器中验证数字计数并提供一个很好的错误消息以上是关于Spring MVC 3 RequestMapping 与正则表达式量词的主要内容,如果未能解决你的问题,请参考以下文章