第23周Java主流框架入门-SpringMVC 2.RESTful开发风格

课程笔记: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 开发的三个要求

  1. 资源通过 URL 进行访问:所有的资源都使用 URL 作为访问的入口。
  2. HTTP 请求方法语义明确
    • GET:查询操作
    • POST:新增操作
    • PUT:更新操作
    • DELETE:删除操作
  3. 只返回数据,不包含展现内容:服务器只返回数据(如 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 中的应用,以及解决跨域访问问题的方法。

相关推荐
熬夜苦读学习2 分钟前
Linux文件系统
linux·运维·服务器·开发语言·后端
菜鸟一枚在这10 分钟前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada28 分钟前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯
阿巴~阿巴~29 分钟前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
菜鸟一枚在这30 分钟前
深入理解设计模式之代理模式
java·设计模式·代理模式
小天努力学java1 小时前
【面试系列】Java开发--AI常见面试题
java·人工智能·面试
river661 小时前
java开发——为什么要使用动态代理?
java
Zayn~1 小时前
JVM系列--虚拟机类加载机制
java
m0_748248021 小时前
Redis使用手册
java
CoderCodingNo1 小时前
【GESP】C++二级真题 luogu-b3924, [GESP202312 二级] 小杨的H字矩阵
java·c++·矩阵