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

相关推荐
Am心若依旧40932 分钟前
[c++11(二)]Lambda表达式和Function包装器及bind函数
开发语言·c++
明月看潮生34 分钟前
青少年编程与数学 02-004 Go语言Web编程 20课题、单元测试
开发语言·青少年编程·单元测试·编程与数学·goweb
Yan.love40 分钟前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶43 分钟前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥44 分钟前
java提高正则处理效率
java·开发语言
VBA63371 小时前
VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
开发语言
轩辰~1 小时前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
小_太_阳1 小时前
Scala_【1】概述
开发语言·后端·scala·intellij-idea
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
智慧老师1 小时前
Spring基础分析13-Spring Security框架
java·后端·spring