RESTful
大约 2 分钟
开发规范
使用 URL 作为用户交互入口
明确的语义规范(
GET
|POST
|PUT
|DELETE
)只返回数据(
JSON
|XML
),不包含任何展现
命名要求
- URI 必须具有语义
- URI 必须使用名次
- URL 扁平化,不超过两级
- URI 名词区分单复数
![](../../Library/Application Support/typora-user-images/image-20210819164549318.png)
注解
注解 | 说明 |
---|---|
@RestController | 相当于 @Controller + @ResponseBody ,将返回的字符串向请求进行输出 |
@RequestMapping("") | 通用绑定,请求映射地址,作用在方法上,不再区分 get/post 请求 |
@PathVariable("") | 路径变量 |
@RequestParam(manager_name) String managerName @RequestParam(value="manager_name",defaultValue="aaaa") String managerName | |
@DateTimeFormat(pattern="yyyy-MM-dd") | 将前端传入的日期字符串转换为 java.util.date |
@GetMapping | 绑定 Get 请求 |
@PostMapping | 绑定 Post 请求 |
@PutMapping | |
@DeleteMapping |
请求类型
两种请求类型最大区别是非简单请求发送前要发送预检请求
简单请求
标准结构的 HTTP 请求,对应 GET/POST 请求
非简单请求
复杂要求的 HTTP 请求,指 PUT/DELETE、扩展标准请求
JSON
配置
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
注解
- 格式化时间
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss SSS", timezone="GMT+8")
跨域访问
浏览器同源策略
阻止从一个域加载的脚本去获取另一个域上的资源
- 协议、域名、端口,有任何一个不同,都被当做是不同的域
允许跨域的标签
<img>
:显示远程图片<script>
:加载远程 JS<link>
:加载远程 CSS
CORS 跨域资源访问
是一种机制,使用额外的 HTTP 头通知浏览器可以访问其他域
- URL 响应头包含
Access-Control-*
指明请求允许跨域
跨域注解
@CorssOrigin
- Controller 跨域注解
@RestController
// @CrossOrigin(origins={"*"}) 允许所有
@CrossOrigin(origins={"http://localhost:8080"},maxAge=3600)
maxAge
:预检请求的结果缓存时长
XML 配置跨域
<mvc:cors>
<mvc:mapping path="/restful/**"
allowed-origins="http://localhost:8080,http://www.imooc.com"
max-age="3600"/>
</mvc:cors>