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的增删改查操作,为读者提供了全面且实用的教程。
简单动作,深刻联结。在这技术海洋,我备好舟,等你扬帆。启航吧!
🌟点击【关注】,解锁定期的技术惊喜,让灵感与知识的源泉不断涌动。
👍一个【点赞】,如同心照不宣的默契,是我们共同语言的闪亮印记。
📚【收藏】好文,搭建你的专属智慧库,让每次回望都能照亮新知之路。