课程笔记:RESTful 开发风格
课程介绍
本节课程介绍 RESTful 开发风格,以及如何在 Spring MVC 中应用这种开发模式。传统 MVC 开发通过 Servlet、JSP 和 Java Bean 实现前后端交互,而 RESTful 开发提供了一种新的理念,更适合现代多样化的客户端需求。
学习内容
1. REST 和 RESTful 的定义
- REST:代表 "表现层状态转换(Representational State Transfer)",是一种理念,强调通过 URL 访问资源。
- RESTful:基于 REST 理念发展出的一种开发风格,用于设计 Web 服务。
2. RESTful 开发的核心概念
- 资源:通过 URL 表现为网络中可访问的对象,如图片、JS、网页等。
- 多样化客户端支持:适用于移动应用、小程序、IoT 设备等多种客户端。
3. RESTful 开发的优势
- 前后端分离:前端专注界面开发,后端专注业务逻辑,通过标准化的数据格式(如 JSON 或 XML)交互。
- 专注数据:服务器端只负责返回数据,不关注数据如何展现。
4. RESTful 开发的三个要求
- 资源通过 URL 进行访问:所有的资源都使用 URL 作为访问的入口。
- HTTP 请求方法语义明确 :
- GET:查询操作
- POST:新增操作
- PUT:更新操作
- DELETE:删除操作
- 只返回数据,不包含展现内容:服务器只返回数据(如 JSON),客户端负责展现。
5. RESTful 命名规则和示例
- 标准命名 :
/articles?author=lily
,表示查询作者为 Lily 的文章。 - 资源 ID :
/student/1
,表示查询编号为 1 的学生信息。
6. 错误与正确的 URI 设计
- 错误示例 :
POST /createArticle/1
(动词用法错误) - 正确示例 :
GET /articles
返回 JSON 数组,GET /article/1
返回 JSON 对象 - 命名规则:复数和单数形式区分,操作路径清晰。
7. RESTful 开发的好处
- 解耦:前后端分工明确,开发效率高。
- 易维护:清晰的 URI 和标准的 HTTP 请求方法使系统更易理解和维护。
- 支持多平台:适应不同客户端的需求,统一数据交互方式。
小结
RESTful 开发风格是一种现代化的 Web 服务设计方式,通过标准化的资源访问、明确的请求方法和专注数据的理念,提供了前后端分离开发的有效解决方案。
Spring MVC:Jackson 与对象序列化
1. 引入Jackson依赖
在 pom.xml
中添加以下依赖,版本需 2.9 及以上:
xml
<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>
2. Spring MVC中对象序列化
直接返回一个 Java 对象,Spring 会使用 Jackson 自动将其转换为 JSON 格式。
代码示例:
java
@RestController
public class RestfulController {
@GetMapping("/person")
public Person findByPersonId(@RequestParam Integer id) {
Person p = new Person();
if (id == 1) {
p.setName("Lily");
p.setAge(23);
}
return p;
}
}
访问 http://localhost/restful/person?id=1
返回如下 JSON:
json
{
"name": "Lily",
"age": 23
}
3. 多对象序列化
java
@GetMapping("/persons")
public List<Person> findPersons() {
List<Person> list = new ArrayList<>();
list.add(new Person("Lily", 23));
list.add(new Person("Smith", 22));
return list;
}
访问 http://localhost/restful/persons
返回 JSON 数组。
4. 日期序列化与时区处理
使用 @JsonFormat
格式化 Date
对象,并指定时区:
java
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthday;
Spring MVC 解决跨域访问问题
1. CORS 简介
CORS(Cross-Origin Resource Sharing):允许浏览器访问其他域的资源,通过在 HTTP 请求和响应头中附加信息实现。
2. 解决跨域访问的两种方式
2.1 使用 @CrossOrigin
注解
适合局部控制跨域:
java
@CrossOrigin(origins = "http://localhost:8080")
@RestController
public class RestfulController {
// Controller代码...
}
2.2 全局 CORS 配置
适用于全局需要跨域的场景。
3. @CrossOrigin
注解配置
- origins:指定允许的域名。
- maxAge:缓存预检请求的时间,单位为秒。
4. 小结
本节课学习了 RESTful 风格和 Jackson 序列化在 Spring MVC 中的应用,以及解决跨域访问问题的方法。