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

相关推荐
唐青枫6 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马7 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261357 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261357 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜1 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫1 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq1 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev1 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮1 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js