路径变量中使用正则表达式匹配

SpringMVC的处理器映射的请求路径中是可以包含路径变量的,语法是{pathVar},如下面的请求路径映射中就定义了一个路径变量var,则在访问时该变量可以是任意的值,所以在请求时/pathvariable/apathvariable/bcd等形式的请求路径都可以映射到下面的处理器方法。

@RequestMapping("/pathvariable/{var}")
public Object testPathVar() {
    return "PathVar";
}

如果有需要,我们还可以通过一个方法参数接收实际访问过程中传递的该路径变量,需要在对应的方法参数上使用@PathVariable标注,如果路径变量的名称和定义的方法参数的名称是一致的,则通常可以不通过@PathVariable的value属性指定方法参数对应的路径变量的名称;如果方法参数的名称和对应的路径变量的名称不一致,则必须如下所示通过@PathVariable的value属性指定对应的路径变量名称。

@RequestMapping("/pathvariable/{var}")
public Object testPathVar(@PathVariable("var") String pathVar) {
    return pathVar;
}

通过方法参数接收的路径变量还会自动的添加到对应的Model中,所以如果上面的示例代码中返回的是一个页面,则我们还可以在对应的页面中通过路径变量名称var获取到传递的实际的路径变量值。

以上介绍的是普通的路径变量使用的方式,它对传递的具体的路径变量值没有什么约束,试想一下,如果我们明确的知道上面的路径变量var的取值只能是小写字母的组合,那么当我们传递的路径变量是abc时是满足我们需求的,可以进入该方法处理,但是当我们传递的路径变量是abc123是不满足我们需求的,这时候也会进入我们的处理方法。虽然我们也可以在我们的处理方法中对路径变量进行校验,但是这明显不是很好的做法,因为严格意义上来说这时候就不应该进入我们的处理器方法。针对这种场景SpringMVC为我们提供了路径变量的正则表达式限定,即允许我们在定义路径变量时指定其需要满足的正则表达式要求,此时只有满足对应正则表达式要求的路径变量才能映射到对应的处理器方法处理。其语法是{varName:regex},varName指定路径变量名,regex定义需要匹配的正则表达式。在下面的示例中只有当我们传递的路径变量regex1是完全由小写字母a-z组成,并且路径变量regex2是由3位的数字组成时才会被映射到下面的处理器方法。比如/pathvariable/a/123是可以映射到下面的处理器方法的,而/pathvariable/a/12a则不能映射到下面的处理器方法。

@RequestMapping("/pathvariable/{regex1:[a-z]}/{regex2:\\d{3}}")
public Object testPathVariableRegex(@PathVariable String regex1,@PathVariable String regex2) {
    Map<String,Object> result = new HashMap<>();
    result.put("regex1",regex1);
    result.put("regex2",regex2);
    return result;
}

如果是上面那样,因为我们已经明确的指定了路径变量regex2需要是3位的数字,所以在方法参数中接收该路径变量时可以把regex2声明为数字类型的,比如下面这样。

@RequestMapping("/pathvariable/{regex1:[a-z]}/{regex2:\\d{3}}")
public Object testPathVariableRegex(@PathVariable String regex1,@PathVariable int regex2) {
    Map<String,regex2);
    return result;
}

(注:本文是基于Spring4.1.0所写)

路径变量中使用正则表达式匹配的更多相关文章

  1. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

  3. iOS &gt;&gt;块&gt;&gt;更改块外部的变量值

    我不是在处理一个Object并改变它,就像我的mString一样.我希望’center’属性的行为类似于myInt,因为它是直接访问的C结构,而不是指向对象的指针.我希望’backgroundColor’的行为类似于我的imstring,因为它是一个指向一个新对象的对象的指针,不是吗?

  4. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  5. ios – 使用附加字符串本地化Info.plist变量

    我正在尝试本地化应用程序的名称,同时仍然能够根据构建配置追加字符串.所以目前它被设置为:该设置定义为:通过这种方式,我们可以为应用程序添加后缀以用于不同的beta版本.问题是,当我们尝试本地化本地化的InfoPlist.strings中的应用程序显示名称时,就像这样我们覆盖存储在Info.plist中的值,并丢失后缀字符.这有什么好办法吗?

  6. iOS – 开始iOS教程 – 变量之前的下划线?

    这是正确的还是我做错了什么?

  7. ios – 静态计算变量被多次实例化

    我有一个日期格式化程序,我试图在UITableViewCell子类中创建一个单例,所以我创建了一个这样的计算属性:问题是我不止一次看到print语句,这意味着它不止一次被创建.我已经找到了其他方法,但我很想知道这里发生了什么.有任何想法吗?解决方法您的代码段相当于只获取属性,基本上它与以下内容相同:如果你只想运行一次,你应该像定义一个惰性属性一样定义它:

  8. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  9. ios – 200在xcode 7中生成DSMM警告

    解决方法我有同样的问题.Facebook表示他们已经意识到这一点并且不是高优先级,因为它不会影响应用程序.我回退到4.7.1警告问题不再存在.我不认为它会被拒绝但不能确定.

  10. ios – UIApplication.delegate必须仅在主线程中使用[复制]

    我应该在主调度中的viewControllers中声明这些)变量位置声明定义了它的范围.您需要确定这些变量的范围.您可以将它们声明为项目或应用程序级别(全局),类级别或特定此功能级别.如果要在其他ViewControllers中使用这些变量,则使用公共/开放/内部访问控制将其声明为全局或类级别.

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部