路径变量中使用正则表达式匹配
SpringMVC的处理器映射的请求路径中是可以包含路径变量的,语法是{pathVar},如下面的请求路径映射中就定义了一个路径变量var,则在访问时该变量可以是任意的值,所以在请求时/pathvariable/a
、pathvariable/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所写)
相关推荐
这时,我们可以在路径变量的定义中使用正则表达式来实现这一需求。 在Spring MVC的`@RequestMapping`注解中,我们可以为路径变量指定一个正则表达式,从而限制该变量的取值范围。例如: ```java @RequestMapping(...
3. 路径变量:如上所述,`@GetMapping("/users/{userId}")`,`{userId}`是一个变量,可以从URL中提取。 4. 多个路径:`@RequestMapping({"/users", "/members"})`,一个方法可以处理多个路径。 5. 组合注解:`@...
- C) 正则表达式:虽然Spring MVC并不直接支持正则表达式,但可以通过自定义拦截器或者使用Spring WebFlux的`@Pattern`注解实现更复杂的模式匹配。 通过灵活地配置`@RequestMapping`的属性,开发者可以构建出高度可...
- `value`:指定处理的请求URI路径,支持通配符和正则表达式。 - `method`:指明接受的HTTP请求方法(如GET、POST)。 - `params`:用于指定匹配或不匹配的请求参数。 - `headers`:用于指定匹配或不匹配的请求...
2. **使用正则表达式匹配路径变量**:更复杂的URL模式可以通过正则表达式来匹配,例如: ```java @RequestMapping(value={"/regex/{number:\\d+}-{tel:\\d+}"}) public ModelAndView regex(@PathVariable("number")...
此方法展示了如何使用正则表达式限制`regexp1`变量的格式。这里的`{regexp1:[a-z-]+}`定义了一个模式,限制`regexp1`只能包含小写字母和破折号。`@PathVariable`依然用于将匹配到的值注入到`regexp1`参数。 3. **...
- **正则表达式**:用于字符串匹配的模式。 - **String类方法**:如split()、replace()、substring()等用于字符串处理的方法。 ### 数据库 #### SQL之连接查询 - **内连接**:INNER JOIN,返回两个表中匹配的数据...
- **正则表达式**:用于匹配字符串中的模式,如查找特定的文本模式。 - **String类方法**:掌握 `substring()`、`replace()`、`split()` 等方法。 #### 8. 数据库 ##### 8.1 SQL之连接查询 - **内连接**:返回两...