Spring MVC的核心类和注解——@RequestMapping注解(三)请求映射方式

一、请求映射方式的分类

基于注解风格的Spring MVC,通过@RequestMapping注解指定请求映射的URL路径。URL路径映射常用的方式有基于请求方式的URL路径映射、基于Ant风格的URL路径映射和基于REST风格的URL路径映射。接下来分别对这三种请求映射方式进行详细讲解。

a. 基于请求方式的URL路径映射

除了可以使用@RequestMapping注解来限定客户端的请求方式之外,从Spring 4.3版本开始,还可以使用组合注解完成客户端请求方式的限定。组合注解简化了常用的HTTP请求方式的映射,并且更好的表达了被注解方法的语义。

二、Spring MVC组合注解

@GetMapping:匹配GET方式的请求。

@PostMapping:匹配POST方式的请求。

@PutMapping:匹配PUT方式的请求。

@DeleteMapping:匹配DELETE方式的请求。

@PatchMapping:匹配PATCH方式的请求。

三、@GetMapping用法示例

接下来以@GetMapping为例讲解组合注解的用法,@GetMapping是@RequestMapping(method = RequestMethod.GET)的缩写,使用组合注解替代@RequestMapping注解,可以省略method属性,从而简化代码。@GetMapping用法示例代码如下所示。

java 复制代码
@GetMapping(value="/firstController")
public void sayHello(){
    ...
}

b. 基于Ant风格的URL路径映射

Spring MVC支持Ant风格的URL路径映射, 所谓Ant风格其实就是一种通配符风格,可以在处理器映射路径中使用通配符对访问的URL路径进行关联。Ant风格的通配符有以下3种,分别是:?匹配任何单字符;*匹配0或者任意数量的字符;**匹配0或者多级目录。

四、Ant风格通配符的路径匹配

|---------|-------------|--------------------------------------------------------------------------------------------------------------------------------|
| 通配符 | URL路径 | 通配符匹配说明 |
| ? | /ant1? | 匹配项目根路径下/ant1[anyone]路径,其中[anyone]可以是任意单字符,即/ant1后有且只有1个字符。如/ant12、/ant1a。 |
| * | /ant2/*.do | 匹配项目根路径下/ant2/[any].do路径,其中[any]可以是任意数量的字符。如/ant2/findAll.do、/ant2/.do。 |
| * | /*/ant3 | 匹配项目根路径下/[onemore]/ant3路径,其中[onemore]可以是数量多于0个的任意字符。如/a/ant3、/findAll/ant3,但是字符数量不能为0个,并且目录层数必须一致,如//ant3、/findAll/a/ant3。 |
| ** | /**/ant4 | 匹配项目根路径下/[anypath]/ant4路径,其中[anypath]可以是0或者多层的目录。如/ant4、/a/ant4、/a/b/ant4。 |
| ** | /ant5/** | 匹配项目根路径下/ant5/[anypath]路径,其中[anypath]可以是0或者多层的目录。如/ant5、/ant5/a、/ant5/a/b。 |

五、映射路径使用多个通配符情况

当映射路径中同时使用多个通配符时,会有通配符冲突的情况。当多个通配符冲突时,路径会遵守最长匹配原则(has more characters)去匹配通配符,如果一个请求路径同时满足两个或多个Ant风格的映射路径匹配规则,那么请求路径最终会匹配满足规则字符最多的路径。例如,/ant/a/path同时满足 /**/path和/ant/*/path匹配规则,但/ant/path最终会匹配"/ant/*/path"路径。

c.基于RESTful风格的URL路径映射

RESTful是按照REST风格访问网络资源,简单说RESTful就是把请求参数变成请求路径的一种风格。 而REST(Representational State Transfer)是一种网络资源的访问风格,规范对了网络资源的访问方式。REST所访问的网络资源可以是一段文本、一首歌曲、一种服务,总之是一个具体的存在。每个网络资源都有一个URI指向它, 要获取这个资源,访问它的 URI 就可以,因此URI 即为每一个资源的独一无二的标识符。

六、传统风格与RESTful风格访问URL格式的不同

传统风格访问的URL格式如下所示。

java 复制代码
http://.../findUserById?id=1

而采用RESTful风格后,其访问的URL格式如下所示。

java 复制代码
http://.../user/id/1

需要注意的是,RESTful风格中的URL不使用动词形式的路径,例如,findUserById表示查询用户,是一个动词,而user表示用户,为名词。

七、RESTful风格的基本请求操作

RESTful风格在HTTP请求中,通过GET 、POST 、PUT和DELETE 4个动词对应四种基本请求操作,具体如下所示。

•GET用于获取资源

•POST用于新建资源

•PUT用于更新资源

•DELETE用于删除资源

八、RESTful风格四种请求的约定方式

|----------------------------------------|-------------|-----------------|
| URL路径 | 请求方式 | 说明 |
| http://localhost:8080/chapter11/user/1 | HTTP GET | 获得参数1进行查询user操作 |
| http://localhost:8080/chapter11/user/1 | HTTP DELETE | 获得参数1进行查询user操作 |
| http://localhost:8080/chapter11/user/1 | HTTP PUT | 获得参数1进行查询user操作 |
| http://localhost:8080/chapter11/user | HTTP POST | 新增user操作 |

九、使用RESTful风格的优势

约定不是规范,约定是可以打破,所以称为RESTful风格,而不是RESTful规范。使用RESTful风格的优势在于路径的书写比较简便,并且通过地址无法得知做的是何种操作,可以隐藏资源的访问行为。

相关推荐
山语山1 分钟前
C语言——文件读写操作
java·c语言·前端·microsoft·visual studio
芝法酱1 分钟前
芝法酱学习笔记(0.6)——nexus与maven私库
java·maven·nexus
u0104058367 分钟前
Java后端开发中的数据保护:如何实现全面的数据加密
java·开发语言
点点滴滴的记录28 分钟前
2017~2018博文汇总目录
java·大数据
夜月行者1 小时前
如何使用ssm实现民族大学创新学分管理系统分析与设计+vue
java·后端·ssm
艾伦~耶格尔1 小时前
IDEA 配置 Git 详解
java·ide·git·后端·intellij-idea
云兮杜康1 小时前
IDEA中用过git之后文件名颜色全变红
java·git·intellij-idea
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS洗衣店订单管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
杨荧1 小时前
【JAVA开源】基于Vue和SpringBoot的周边产品销售网站
java·开发语言·vue.js·spring boot·spring cloud·开源
橘橙黄又青1 小时前
多线程-初阶(1)
java·开发语言