第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 中的应用,以及解决跨域访问问题的方法。

相关推荐
Fireworkitte1 小时前
Apache POI 详解 - Java 操作 Excel/Word/PPT
java·apache·excel
weixin-a153003083161 小时前
【playwright篇】教程(十七)[html元素知识]
java·前端·html
DCTANT1 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
Touper.2 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
黄雪超2 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice2 小时前
对象的finalization机制Test
java·开发语言·jvm
思则变2 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
lijingguang2 小时前
在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
开发语言·c#
¥-oriented3 小时前
【C#中路径相关的概念】
开发语言·c#
CoderCodingNo3 小时前
【GESP】C++四级考试大纲知识点梳理, (7) 排序算法基本概念
开发语言·c++·排序算法