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


猜你喜欢
- 1、安装依赖<dependency> <
- 目录前言1、什么叫循环依赖呢2、具体出现循环依赖的代码逻辑3、解决循环依赖的代码实现总结前言本文基于springboot版本2.5.1 &n
- 建造者模式是Java中一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程分解为多个简单对象的构建过程,并且使这些构建过程按照一定的顺
- Threadlocal有什么用:简单的说就是,一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自
- Java提示缺少返回值语句怎么办?这里我们给大家提供具体的解决方法。首先,以下面的程序为例,会看到在控制台有:错误:缺少返回语句的提示。找到
- 首先在新建了一个web服务文件。public SqlWhhWebService1() &nbs
- 1. 接口是一种规范很好,你已经知道接口是一种规范了!下面这张图是我们生活中遇到的接口:电源插座接口。2. 为什么需要规范呢?因为
- MultipartResolver和ServletFileUpload冲突如果同时使用了MultipartResolver 和Servlet
- 滚轮选择控件Android自带的选择时间控件有点丑,往往产品和设计都比较嫌弃,希望做成ios一样的滚轮选择,下面是我在NumberPicke
- 前言Go语言定义Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thomps
- java 避免出现NullPointerException(空指针)的方法总结Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出
- 网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接。这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧)。如果在使
- 在使用ComboBox控件时,遇到了重新绑定赋值出问题的情况。正常情况下,对于数据重新赋值的或者绑定数据源的时候,为了防止数据出现问题,都会
- 实现功能:模拟简单登录功能,登录成功跳转新页面,登录失败在原登录界面提示登录失败信息开发环境:eclipseTomcat-8.0预备知识:H
- 什么是BottomNavigationView底部菜单栏BottomNavigationView的简单用法需求:如上图所示。点击测试一菜单,
- 我们在打包的过程中,需要对代码进行混淆处理,可项目中需要混淆的地方很多,特别是添加依赖的,如果要我们一个一个添加,无疑这大大的添加了我们的工
- 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JA
- 本文实例为大家分享了Android分类侧滑菜单的制作方法,供大家参考,具体内容如下classificmenuActivity.java代码:
- 1.前言初始化就是给变量一个初始值。 初始化的目的是为了让变量有值,防止使用时出现异常。在构造函数中,有一项重要功能就是对成员变量进行初始化
- Fresco是FaceBook开源的Android平台图片加载库,可以从网络,从本地文件系统,本地资源加载图片Fresco本身已经实现了圆角