SpringMVC路径匹配中使用通配符
@RequestMapping中指定的路径也可以使用通配符*,表示任意字符。如下的处理器方法可以映射请求/antstyle/a
,可以映射请求/antstyle/b
,但是它不能映射请求请求/antstyle/a/b
,因为它只能映射一级路径。
@RequestMapping("/antstyle/*")
public Object testAntStyle() {
return "antStyle";
}
通配符不是只能放在最后的,它也可以放在其它位置。下面的示例中就是把通配符放在中间位置,它可以映射请求/antstyle/a/bcd
,也可以映射请求/antstyle/ab/bcd
。
@RequestMapping("/antstyle/*/bcd")
public Object testAntStyle() {
return "antStyle";
}
通配符还可以匹配以某字符结束的路径。如下处理器方法可以映射/antstyle/
后路径以bcd
结尾的路径,比如/antstyle/abcd
、/antstyle/bcd
等。
@RequestMapping("/antstyle/*bcd")
public Object testAntStyle() {
return "antStyle";
}
通配符还可以匹配以某字符开始的路径。如下处理器方法可以映射/antstyle/abc
、/antstyle/abcd
等。
@RequestMapping("/antstyle/abc*")
public Object testAntStyle() {
return "antStyle";
}
一个星号只能匹配一级路径,如果需要匹配任意的多级路径则可以使用两个星号。如下处理器方法可以映射任何请求路径以/antstyle/
开头的请求,如/antstyle/a
、/antstyle/a/b
等。
@RequestMapping("/antstyle/**")
public Object testAntStyle() {
return "antStyle";
}
一个星号与两个星号还可以一起使用,此时一个星号还是匹配任意字符,但是只能在当前层级,而两个星号还是可以匹配任意的层级,所以如下可以匹配/antstyle/abca/xxx/xxx
等。
@RequestMapping("/antstyle/abc*/**")
public Object testAntStyle() {
return "antStyle";
}
请求映射路径中使用了通配符时,也还是可使用路径变量的,它们是相互独立的。如下代码中我们就在请求路径中同时使用了路径变量和通配符。
@RequestMapping("/antstylewithpathvariable/*/{path}/abc")
public Object testAntStyleWithPathVariable(@PathVariable String path) {
return "ant style with path variable, path is " + path;
}
同时存在路径变量和通配符匹配时的优先级关系
当一个请求路径可以匹配多个处理器方法时,SpringMVC将优先匹配路径映射更精确的那个。
- 拥有更少的路径变量和通配符的路径映射更精确。比如
/hotels/{hotel}/*
拥有一个路径变量和一个通配符,那么它会比/hotels/{hotel}/**
更精确,会优先匹配,因为后者拥有一个路径变量和两个通配符。 - 如果两个路径映射的通配符数量是一样的,则指定的信息更多那个路径会更精确,比如
/hotels/abc*
比/hotels/*
更精确。 - 路径变量比通配符更精确。比如
/hotels/{hotel}
比/hotels/*
更精确。 - 默认映射
/**
比其它所有的路径映射的优先级都低,比如/{a}/{b}
就比它更精确。 - 拥有两个通配符的路径映射比其它没有两个通配符的路径映射的优先级都低,比如
/abc/**
的优先级低于/abc/{a}
。
(注:本文是基于Spring4.1.0所写)
相关推荐
Spring MVC 中的路径匹配原则是指在配置拦截器时,使用 `<mvc:mapping/>` 子标签指定需要拦截的路径。该标签的 `path` 属性用来指定需要拦截的路径,例如 `<mvc:interceptor><mvc:mapping path="/" />...
3. **路径匹配模式**: - `**`:匹配任意数量的路径层次。 - `*`:匹配任意长度的路径(但不包括`/`)。 - `?`:匹配单个字符。 - `{}`:路径变量。 #### 四、总结 通过上述分析可以看出,`@RequestMapping`...
- **通配符映射**:`@RequestMapping("/path/*")`,星号(*)代表任意字符,这种映射方式可以匹配以指定路径开头的所有请求。 - **精确匹配**:`@RequestMapping("/path")`,这种是最基础的映射,只匹配完全相同的...
2. **通配符和占位符**: SpringMVC的请求映射允许使用通配符(如`*`)和占位符(如`:paramName`)。通配符可以匹配任何字符序列,而占位符则会捕获实际的值,可以用于动态路由。例如,`/users/{userId}`将匹配形如/...
当我们使用通配符时,需要注意的是,它们会影响URL匹配的精确度。例如,如果将`@RequestMapping`的URL设置为`"/register*"`,它将匹配`"/user/register.html"`、`"/user/register.x"`,甚至`"/user/register/extra...
4. **通配符**: 在路径中可以使用`*`作为通配符。例如,`@RequestMapping("/files/*")`可以匹配所有以"/files/"开头的路径。 5. **多属性组合**: `@RequestMapping`还可以同时处理多个属性,如`value`(定义请求...
匹配单个字符,*匹配任意数量的字符,**匹配多层路径),还支持带占位符的URL,例如/user/{userId},其中{userId}是一个变量,可通过@PathVariable注解绑定到控制器方法的参数上。 在HTTP请求数据绑定方面,...
- `value`:指定处理的请求URI路径,支持通配符和正则表达式。 - `method`:指明接受的HTTP请求方法(如GET、POST)。 - `params`:用于指定匹配或不匹配的请求参数。 - `headers`:用于指定匹配或不匹配的请求...
另一种方式是在Spring MVC的配置文件中使用`<mvc:resources>`标签来指定静态资源的路径和映射。虽然在提供的代码中这部分注释掉了,但正确的使用方式如下: ```xml **" location="/WEB-INF/css/"/> **" location="/...
对于支持Ant风格的URL配置,`@RequestMapping`可以通过通配符`*`来匹配多个路径。例如: ```java @GetMapping("/geturlant/**.html") public String getUrlAnt(HttpServletRequest request) { // ... } ``` 这个...
4. **MyBatis-Plus**:MyBatis-Plus提供了更强大的查询API,可以直接在Java代码中使用`eq`, `like`, `likeRight`等方法进行模糊查询。 然而,要注意的是,文中提到的分页存在bug,这可能源于配置问题、SQL编写错误...
该项目可能使用了Eclipse IDE进行开发,使用了SpringMVC或Struts2等MVC框架来简化开发,同时可能还依赖了其他JavaWeb开发库,如Hibernate进行数据持久化,或者MyBatis进行SQL映射。 总结来说,这个项目涵盖了...
- **Resource通配符路径:** 提供了类似于Ant风格的路径模式匹配,用于访问多个资源。 ### 5. Spring表达式语言(SpEL) - **SpEL概述:** 简介了SpEL的用途以及基本语法。 - **SpEL基础与语法:** 详细解释了SpEL...
`@RequestMapping`支持通配符`*`,如`/users/*`,这意味着它将匹配所有以`/users/`开头的请求路径。 ### 8. 注解属性 `@RequestMapping`还有一些其他属性,如`produces`和`consumes`,用于指定响应内容类型和接受的...
- **Resource通配符路径**:支持Ant风格的路径模式匹配。 ### Spring表达式语言(SpEL) Spring表达式语言是一个功能强大的表达式语言,它支持在运行时查询和操作对象图。 - **SpEL基础**:提供了一套表达式语法...
2. **定义通知方法**:在切面类中使用 AOP 注解来定义不同类型的通知方法。 3. **配置自动代理**:在 Spring 配置文件中启用 AOP 支持,如 `<aop:aspectj-autoproxy/>`。 #### 四、切点表达式的使用 切点表达式...
url-pattern模式匹配微信公众号平台服务器配置的URL配置,如果需要处理多个微信公众号,可以配置多个servlet-mapping或者使用路径通配符匹配多个url链接。 3、spring配置文件 spring配置文件applicationContext.xml...