SpringMVC路径匹配中使用通配符问题

作者:234390216 时间:2023-07-18 20:44:03 

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所写)

请求路径参数使用正则表达式


@GetMapping("/user/{id:\\d+}")  //使用正则指定Id为数字
    public User getInfo(@PathVariable String id){
        ...
    }

来源:https://www.iteye.com/blog/elim-2409316

标签:SpringMVC,路径匹配,通配符
0
投稿

猜你喜欢

  • springboot如何引入外部yml配置文件

    2023-11-07 07:35:38
  • 字符串阵列String[]转换为整型阵列Int[]的实例

    2021-07-22 08:19:17
  • visual studio 2019安装配置可编写c/c++语言的IDE环境

    2023-10-04 02:01:02
  • Java堆&优先级队列示例讲解(上)

    2023-04-09 11:09:59
  • SpringBoot执行定时任务@Scheduled的方法

    2022-08-13 03:43:31
  • Spring的事务机制实例代码

    2021-09-11 07:46:23
  • C#邮件定时群发工具Atilia用法实例

    2022-06-13 11:50:24
  • Java并发之嵌套管程锁死详解

    2023-01-13 10:55:01
  • go语言题解LeetCode88合并两个有序数组示例

    2023-10-23 00:55:10
  • 判断一个整数是否是2的N次幂实现方法

    2022-12-25 00:55:10
  • 代理模式:JAVA静态代理和动态代理的实例和实现详解

    2023-06-05 02:19:27
  • 使用JAXBContext 设置xml节点属性

    2021-09-21 00:05:44
  • 深入了解Java核心类库--BigDecimal和System类

    2023-12-18 01:50:28
  • SpringBoot整合Web之AOP配置详解

    2022-01-17 21:38:11
  • 详解Java中ThreadLocal类型及简单用法

    2022-03-09 11:51:51
  • Android studio 去除版本控制教程

    2022-03-21 20:39:43
  • Java class文件格式之数据类型(二)_动力节点Java学院整理

    2022-06-26 02:15:45
  • java调用回调机制详解

    2023-11-14 21:53:21
  • 基于Rxjava实现轮询定时器

    2021-12-27 07:22:10
  • 深入分析JAVA 建造者模式

    2023-03-14 01:32:27
  • asp之家 软件编程 m.aspxhome.com