Java Spring MVC框架 IV

Java Spring MVC框架 IV

1.RESTful基础

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型
为新增、变更、删除所调用资源
– 以上资料来自网络

● RESTful的设计风格的典型表现就是:将某些唯一的请求参数的值放在
URL中
,使之成为URL的一部分,例如:
– https://www.zhihu.com/question/28557115 – 这个URL的最后一部分28557115应该就是这篇贴子的id值,而不是使用例
如?id=28557115这样的方式放在URL参数中。

● 注意:RESTful只是一种设计风格,并不是一种规定,也没有明确的或统
一的执行方式

● 在开发实践中,如果没有明确的要求,以处理用户数据为例,可以将URL
设计为:
/users:查看用户列表
/users/9527:查询id=9527的用户的数据
/users/9527/delete:删除id=9527的用户的数据

● RESTful建议根据希望实现的数据操作不同而使用不同的请求方式:
– 通过此前的学习,你应该知道HTTP请求方式包括:GET, HEAD, POST, PUT, PATCH,DELETE, OPTIONS, TRACE – 查询:使用GET请求
– 新增:使用POST请求
– 修改:使用PUT请求
– 删除:使用DELETE请求

● 在开发实践中,仅使用GET、POST这2种请求方式的做法更为常见,主要
因为:
– 某些业务可能非常复杂,可能同时需要执行增、删、改、查的多种数据操作,不便于界定使用POST、DELETE、PUT、GET请求方式中的哪一种
– 大部分开发者更习惯于只使用GET、POST这2种请求方式

● 通常,以查询为主要目标的请求使用GET请求方式,否则,使用POST请
求方式

● 在RESTful风格的URL中,大多是包含了某些请求参数的值,在使用
Spring MVC框架时,当需要设计这类URL时,可以使用{名称}进行占位,
并在处理请求的方法的参数列表中,使用@PathVariable注解请求参数,
即可将占位符的实际值注入到请求参数中!

● 示例代码:

// /user/3/info.do
@GetMapping("/{id}/info.do")
public UserVO info(@PathVariable Long id) {
System.out.println("即将查询 id = " + id + " 的用户的信息……");
UserVO userVO = new UserVO();
userVO.setUsername("chengheng");
userVO.setPassword("1234567890");
userVO.setEmail("chengheng@qq.com");
return userVO;
}

● 提示:在以上代码中,URL中使用的占位符是{id},则方法的参数名称也
应该是id,就可以直接匹配上!如果无法保证这2处的名称一致,则需要
在@PathVariable注解中配置占位符中的名称,例如:

@GetMapping("/{userId}/info.do")
public UserVO info(@PathVariable("userId") Long id) {
// ...
}

● 在使用{}格式的占位符时,还可以结合正则表达式进行匹配,其基本语法
是:

{占位符名称:正则表达式}

● 例如:

@GetMapping("/{id:[0-9]+}/info.do")

● 当设计成以上URL时,仅当占位符位置的是纯数字的URL才会被匹配上,
如果不是纯数字的刚出现404错误页面。

● 以上模式的多种不冲突的正则表达式是可以同时存在的,例如:

@GetMapping("/{id:[0-9]+}/info.do")
public UserVO info(@PathVariable Long id) {
System.out.println("即将查询 id = " + id + " 的用户的信息……");
// ...
}
@GetMapping("/{username:[a-zA-Z]+}/info.do")
public UserVO info(@PathVariable String username) {
System.out.println("即将查询 用户名 = " + username + " 的用户的信息……");
// ...
}

● 还可以存在不使用正则表达式,但是URL格式几乎一样的配置,例如:

@GetMapping("/{id:[0-9]+}/info.do")
public UserVO info(@PathVariable Long id) {
System.out.println("即将查询 id = " + id + " 的用户的信息……");
// ...
}
@GetMapping("/{username:[a-zA-Z]+}/info.do")
public UserVO info(@PathVariable String username) {
System.out.println("即将查询 用户名 = " + username + " 的用户的信息……");
// ...
}
// http://localhost:8080/springmvc01_war_exploded/user/list/info.do
@GetMapping("/list/info.do")
public UserVO list() {
System.out.println("即将查询 用户的列表 的信息……");
// ...
}

● 执行时,如果使用/user/list/info.do,则会匹配到以上代码中的最后一个
方法,并不会因为这个URL还能匹配第2个方法配置的{username:[a-zA- Z]+}而产生冲突,所以,使用了占位符的做法并不影响精准匹配的路径

2.RESTful的小结

● [★★★☆☆] RESTful是一种风格,并不是规范或标准

● [★★★☆☆] RESTful的典型表现有:
将某些唯一的请求参数的值放在URL中,使之成为URL的一部分
根据希望实现的数据操作不同而使用不同的请求方式

● [★★★★★] 将请求参数设计到URL中时,可以在@RequestMapping或
相关注解配置URL时使用{名称}进行占位

● [★★★★★] 在处理请求的方法的参数列表中,为占位符对应的参数添加
@PathVariable,Spring MVC会自动获取URL中的值注入到参数中

● [★★★★★] 当占位符中的名称与方法参数的名称不一致时,需要配置
@PathVariable注解的参数

● [★★★★★] 在URL的占位符中,可以使用正则表达式限制占位符的文本
格式,不冲突的多个使用了正则表达式的相同格式URL可以共存

● [★★★★★] 使用了正则表达式的占位符的,与不使用占位符的,相同格
式的URL可以共存,且优先匹配到不使用占位符的

我是将军;我一直都在,。!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值