当前位置: 首页 > news >正文

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-Typeapplication/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的增删改查操作,为读者提供了全面且实用的教程。

简单动作,深刻联结。在这技术海洋,我备好舟,等你扬帆。启航吧!
🌟点击【关注】,解锁定期的技术惊喜,让灵感与知识的源泉不断涌动。
👍一个【点赞】,如同心照不宣的默契,是我们共同语言的闪亮印记。
📚【收藏】好文,搭建你的专属智慧库,让每次回望都能照亮新知之路。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • UNiapp 微信小程序渐变不生效
  • ue5笔记
  • 渗透测试过程中如何做好个人防护?
  • C++分词工具:Jieba分词
  • 关于git clone速度极慢的解决方法
  • 海思arm-hisiv400-linux-gcc 交叉编译rsyslog 记录心得
  • 初识C++|模板初阶
  • Python莫兰生死抑制放大进化图
  • RocketMQ 事务消息
  • 《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-02-信息系统架构
  • 昇思25天学习打卡营第4天 | 网络构建
  • Fastgpt本地或服务器私有化部署常见问题
  • 设计App的后端接口分类以及环境依赖包详情
  • java启动shell脚本
  • python入门课程Pro(1)--数据结构及判断
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • js数组之filter
  • text-decoration与color属性
  • 力扣(LeetCode)965
  • 面试遇到的一些题
  • 排序算法之--选择排序
  • 深度学习中的信息论知识详解
  • 新书推荐|Windows黑客编程技术详解
  • 用 Swift 编写面向协议的视图
  • Linux权限管理(week1_day5)--技术流ken
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • # Java NIO(一)FileChannel
  • (11)MSP430F5529 定时器B
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (五十)第 7 章 图(有向图的十字链表存储)
  • .NET 8.0 发布到 IIS
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Memory Profiler的使用举例
  • .Net 知识杂记
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .netcore 获取appsettings
  • .NET开源快速、强大、免费的电子表格组件
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net中的Queue和Stack
  • .考试倒计时43天!来提分啦!
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • [ABC294Ex] K-Coloring
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [C#]C#学习笔记-CIL和动态程序集
  • [C++] 容器适配器:深入理解Stack与Queue的底层原理
  • [CISCN2019 华东北赛区]Web2
  • [cogs2652]秘术「天文密葬法」
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [exgcd] Jzoj P1158 荒岛野人