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

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

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

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, Object> result = new HashMap<>();
    result.put("regex1", regex1);
    result.put("regex2", regex2);
    return result;
}

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

目录
相关文章
|
Java
SpringBoot 映射路径中 匹配正则表达式
SpringBoot 映射路径中 匹配正则表达式
887 0
SpringBoot 映射路径中 匹配正则表达式
|
2月前
|
Python
[django]路由变量与正则表达式
[django]路由变量与正则表达式
如何根据文件夹中文件,生成对应名字的图片,名称一样的路径,这里用到了变量,将集合定义在外面,字符串拼接,正则表达式截取.jpg文件
如何根据文件夹中文件,生成对应名字的图片,名称一样的路径,这里用到了变量,将集合定义在外面,字符串拼接,正则表达式截取.jpg文件
|
5月前
|
Java
SpringBoot 映射路径中 匹配正则表达式
SpringBoot 映射路径中 匹配正则表达式
161 0
|
11月前
|
前端开发 应用服务中间件 API
简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析
简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析
286 0
springMVC创建基础变量
在springMVC中有一些变量是基础变量,可以在全局多个地方使用,在修改规则的时候,这样只用修改一个地方就好了,而且可以避免很多不必要的bug出现下面就来总结一下在我的项目中如何去创建一个全局基础变量 创建一个全局基础变量只需要三步: 1:在存放基础变量类的class中创建这个变量,我的在WechatConst.
652 0
|
5月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
4月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
55 1
|
4月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
4月前
|
XML Java 数据格式
SpringMVC的XML配置解析-spring18
SpringMVC的XML配置解析-spring18