Spring Boot 3.3 【三】Spring Boot RESTful API 增删改查详细教程
Spring Boot RESTful API 增删改查详细教程
一、RESTful 架构风格简介
1. 简介
RESTful API 是一种基于HTTP协议的网络应用接口设计风格,它遵循REST(Representational State Transfer,表述性状态转移)原则。RESTful架构风格的出现,旨在利用现有的HTTP标准和方法,如GET、POST、PUT、DELETE等,对网络资源进行操作,使得Web服务更加简洁、易于理解和使用。
2. 优势
RESTful架构,即Representational State Transfer架构风格,是一种用于设计网络应用程序的软件架构风格。它具有多个显著的优势,这些优势共同作用,使RESTful架构成为构建现代Web服务和API的首选方式之一:
- 无状态性:RESTful架构要求客户端与服务器之间的交互是无状态的,这意味着每次请求都包含理解该请求所需的所有信息。这简化了服务器的设计,增强了可伸缩性,因为服务器无需为单个用户会话维护状态。
- 统一接口: RESTful架构采用了一组标准的方法(如GET, POST, PUT, DELETE等HTTP方法),使API更加易于理解和使用。
- 分层系统: 通过分层设计,中间层可以添加缓存、负载均衡或代理功能,而不会影响客户端和服务器之间的通信。
- 可移植性和可扩展性: RESTful服务可以轻松地在不同的平台和语言之间实现,易于集成 第三方服务,并且可以随着需求的增长而扩展。
- 简洁性: RESTful架构通常使用轻量级的数据格式,如 JSON或XML,这使数据交换更高效。
- 统一资源标识: RESTful架构使用 URL 来唯一标识资源,这使得资源的定位和访问变得简单直接。
二、示例代码
以下是一个使用 Spring Boot 构建的简单 RESTful API 示例,用于管理用户信息。这个示例将展示如何创建、读取、更新和删除用户信息,但不连接实际的数据库。我们将使用Java语言进行示例演示。
1. 首先,创建一个Spring Boot项目,并添加必要的依赖项到你的pom.xml文件中:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 其他依赖项可以根据需要添加 -->
</dependencies>
2. 接下来,创建一个用户模型 User.java :
package com.jsglxx.model;public class User { private long id; private String name; private String email; // 构造函数 public User() { } public User(long id, String name, String email) { this.id = id; this.name = name; this.email = email; } // getter和setter方法 public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }
}
3. 创建一个用户控制器 UserController.java :
package com.jsglxx.controller;
import com.jsglxx.model.User;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import java.util.*; @RestController
@RequestMapping("/users")
public class UserController { // 模拟的用户数据存储 private Map<Long, User> users = new HashMap<Long, User>(); private long idCounter = 0; // 创建用户 @PostMapping public ResponseEntity<User> createUser(@RequestBody User user) { user.setId(++idCounter); users.put(user.getId(), user); return new ResponseEntity<User>(user, HttpStatus.CREATED); } // 读取用户 @GetMapping("/{id}") public ResponseEntity<User> getUser(@PathVariable long id) { User user = users.get(id); return user != null ? new ResponseEntity<User>(user, HttpStatus.OK) : new ResponseEntity<User>(user, HttpStatus.NOT_FOUND); } // 更新用户 @PutMapping("/{id}") public ResponseEntity<User> updateUser(@PathVariable long id, @RequestBody User user) { User existingUser = users.get(id); if (existingUser != null) { existingUser.setName(user.getName()); existingUser.setEmail(user.getEmail()); users.put(id, existingUser); return new ResponseEntity<User>(existingUser, HttpStatus.OK); } else { return new ResponseEntity<User>(existingUser, HttpStatus.NOT_FOUND); } } // 删除用户 @DeleteMapping("/{id}") public ResponseEntity<Void> deleteUser(@PathVariable long id) { users.remove(id); return new ResponseEntity<Void>(HttpStatus.NO_CONTENT); }
}
接下来是本文的核心部分:
这段代码是一个典型的Spring Boot控制器类,用于处理与 用户 相关的 RESTful API 请求。以下是对代码核心部分的解读:
1)类注解:
- @RestController:表明这是一个REST风格的控制器,其中的方法返回值会直接作为HTTP响应体返回。
- @RequestMapping(“/users”):指定该控制器处理所有以 /users 开头的请求。
2)成员变量:
- private Map<Long, User> users:用于模拟用户数据的存储,使用 HashMap实现。
- private long idCounter:用于生成用户ID的计数器。
3)方法:
- createUser(@RequestBody User user):Spring Boot 使用 @PostMapping 处理POST请求,用于创建新用户。方法接受一个 User 对象作为请求体,将其ID设置为 idCounter 的下一个值,并将其存储在 users 映射中。然后,返回一个带有 HttpStatus.CREATED 状态码的 ResponseEntity 对象。
- getUser(@PathVariable long id):Spring Boot 使用 @GetMapping(“/{id}”) 处理GET请求,用于读取指定ID的用户。方法通过 @PathVariable 注解获取URL中的 id 参数,并从 users 映射中检索对应的用户。如果用户存在,则返回一个带有 HttpStatus.OK 状态码的 ResponseEntity 对象;否则,返回一个带有 HttpStatus.NOT_FOUND 状态码的 ResponseEntity 对象。
- updateUser(@PathVariable long id, @RequestBody User user):Spring Boot 使用 @PutMapping(“/{id}”) 处理PUT请求,用于更新指定ID的用户。方法通过 @PathVariable 注解获取URL中的 id 参数,并通过 @RequestBody 注解获取请求体中的 User 对象。然后,从 users 映射中检索对应的用户,并更新其名称和电子邮件地址。最后,返回一个带有 HttpStatus.OK 状态码的 ResponseEntity 对象,或者如果用户不存在,则返回一个带有 HttpStatus.NOT_FOUND 状态码的 ResponseEntity 对象。
- deleteUser(@PathVariable long id):Spring Boot 使用 @DeleteMapping(“/{id}”) 处理DELETE请求,用于删除指定ID的用户。方法通过 @PathVariable 注解获取URL中的 id 参数,并从 users 映射中移除对应的用户。然后,返回一个带有 HttpStatus.NO_CONTENT 状态码的 ResponseEntity 对象,表示请求已成功处理,但响应体中不包含任何内容。
4.最后,创建一个Spring Boot应用程序的主类 UserApplication.java:
package com.jsglxx.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
5. 启动测试 RESTful API
现在,你可以运行 DemoApplication 类来启动 Spring Boot 应用程序。然后,你可以使用HTTP客户端(如Postman、Curl或浏览器)来测试RESTful API。这里使用Postman进行测试:
1)发送POST请求到/users来创建一个新用户:
步骤一:设置 POST请求类型、请求地址、raw 及请求的 json串:
步骤二:设置 Content-Type 为 application/json,如果没有就添加该KEY-VALUE:
步骤三:返回结果如下:
2)同理,发送 GET 请求到 /users/{id} 来读取一个用户:
设置 URL 为 http://localhost:8080/users/1,请求方法为 GET:
注意:java1.8以上版本,需要指定-parameters参数,否则会报如下错误,这个错误信息表明Java编译器没有生成包含方法参数名称的字节码:
java.lang.IllegalArgumentException: Name for argument of type [long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the ‘-parameters’ flag.
解决方案:
在 Pom.xml 中加入如下代码:
<plugins> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><compilerArgs><arg>-parameters</arg> <!-- 这一行是关键 --></compilerArgs></configuration></plugin></plugins>
3)发送 PUT 请求到 /users/{id} 来更新一个用户:
设置 URL 为 http://localhost:8080/users/1,请求方法为 PUT,并设置修改的用户信息 json串,然后点击 Send:
4) 发送 DELETE 请求到 /users/{id} 来删除一个用户:
设置 URL 为 http://localhost:8080/users/1,请求方法为 DELETE:
结束语
本文详细介绍了RESTful架构风格,包括其简介和优势,并通过示例代码展示了如何在Spring Boot中实现RESTful API的增删改查操作,为读者提供了全面且实用的教程。
简单动作,深刻联结。在这技术海洋,我备好舟,等你扬帆。启航吧!
🌟点击【关注】,解锁定期的技术惊喜,让灵感与知识的源泉不断涌动。
👍一个【点赞】,如同心照不宣的默契,是我们共同语言的闪亮印记。
📚【收藏】好文,搭建你的专属智慧库,让每次回望都能照亮新知之路。